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 |