Program Language/C & C++

[C++] decltype 지정자

야곰야곰+책벌레 2021. 12. 16. 15:40
728x90
반응형

적절한 생성자가 있다면 auto를 사용할 수 있다. 그러나 때로는 초기화된 변수를 정의하지 않고 유형을 추론하고 싶을 때가 있다. 그런 다음 유형 지정자를 사용할 수 있다.

decltype(expr)은 expr의 선언된 유형이다. 이것은 genetic programming에서 주로 유용하다.

내부적으로 다른 요소 유형을 가진 두 개의 행렬을 추가하는 함수를 작성할 때 더하기의 결과의 유형은 무엇이어야 할까? 행렬이지만 요소의 유형은 무엇일까? 명백한 대답은 합계의 요소 유형이 요소의 합계 유형과 같다는 것이다. 따라서 다음과 같이 선언할 수 있다.

template<class T, class U>
auto operator+(const Matrix<T>& a, const Matrix<U>& b) −> Matrix<decltype(T{}+U{})>;

반환 유형을 인수 측면에서 표현할 수 있도록 접미사 반환 유형 구문을 사용하면 Matrix<decltype(T{}+U{}>. 즉, 결과는 요소 유형이 다음과 같은 행렬이 된다. 정의에서 Matrix의 요소 유형을 표현하기 위해 다시 decltype()이 필요하다. 

template<class T, class U>
auto operator+(const Matrix<T>& a, const Matrix<U>& b) −> Matrix<decltype(T{}+U{})>
{
    Matrix<decltype(T{}+U{})> res;
    for (int i=0; i!=a.rows(); ++i)
        for (int j=0; j!=a.cols(); ++j)
        	res(i,j) += a(i,j) + b(i,j);
    return res;
}

 

믄 말인지 모르겠다. ㅎㅎ

728x90
반응형

'Program Language > C & C++' 카테고리의 다른 글

[C++] 별칭  (0) 2021.12.16
[C++] 객체와 값  (0) 2021.12.16
[C++] auto 지정자  (0) 2021.12.16
[C++] 데이터 타입 (bool, char, integer, floating)  (0) 2021.12.16
[VS] Visual Studio Dependencies(종속성) 설정  (0) 2021.12.06