이 예제가 있습니다. 행렬의 클래스이며 행렬의 차원이 템플릿 인수로 제공됩니다.템플릿 클래스의 대입 연산자
template <std::size_t DIM>
class Matrix {
// ...
};
int main()
{
Matrix<2> m2;
Matrix<4> m4;
m2 = m4;
}
와트 내 대입 연산자는 4 2에서 m2
의하여 DIM
을 변경하려면 봐야합니까?
이 예제가 있습니다. 행렬의 클래스이며 행렬의 차원이 템플릿 인수로 제공됩니다.템플릿 클래스의 대입 연산자
template <std::size_t DIM>
class Matrix {
// ...
};
int main()
{
Matrix<2> m2;
Matrix<4> m4;
m2 = m4;
}
와트 내 대입 연산자는 4 2에서 m2
의하여 DIM
을 변경하려면 봐야합니까?
와트 내 할당 연산자 한 4 2에서 m2의 희미한을 변경하려면보고 않습니다는?
당신은 그렇게 할 수 없습니다. 불가능합니다.
개체의 클래스 형식의 템플릿 인수를 변경할 수 없습니다. 런타임에 변경할 수있는 동적 형식이 아닌 형식의 정적 속성입니다.
int
을 값 4에서 값 3으로 변경할 수 있지만 long
으로 변경할 수는 없습니다. 마찬가지로 Matrix<2>
의 값을 변경할 수는 있지만 유형을 Matrix<4>
으로 변경할 수는 없습니다.
m2 = m4
을 할 방법이 없으며 의미있는 의미가 있습니다. 그래서 그 m_dim
값을 변경할 수 있습니다 유형에 할당
class Matrix {
std::size_t m_dim;
// ...
};
지금 당신이 런타임에 값을 변경할 수 있습니다
은 아마 당신은 차원이 유형의 동적 특성이 아닌 템플릿 인수되고 싶어요.
template <std::size_t DIM>
class Matrix {
template <std::size_t OtherDim>
Matrix& operator=(const Matrix<OtherDim>& rhs)
{
// whatever magic you need in here
return *this;
}
};
Matrix<DIM>
및 Matrix<OtherDim>
는 두 가지 종류가 있습니다.
첫 번째 질문은 "Matrix<4>
을 Matrix<2>
에 할당하는 논리적 조작이 있습니까?"입니다.
아마도 대답은 "아니오"입니다.
그러나 아마 유효한 Matrix<2>
와 Matrix<2>
사이의 할당이 :
template <std::size_t DIM>
class Matrix {
// implement a copy constructor...
Matrix(const Matrix& rhs)
: /* copy-initialise all data */
{
/* any other copy-related logic */
}
// ...and a copy-assignment operator
Matrix& operator=(const Matrix& rhs)
{
if (&rhs != this) {
Matrix tmp(rhs);
std::swap(*this, tmp);
}
return *this;
}
};
그래, 그게 내가 시도하지만 그것은 운영자의 OtherDim에 DIM을 변경하는 방법을 모르겠다 –
대답을 편집 할 것입니다 –
당신은 Dim 유형을 변경할 수 없습니다 그리고 당신은 개체의 변경할 수 없습니다 –
'Matrix <2> m2();'는 행렬 객체를 인스턴스화하지 않습니다. 그것은 함수를 선언 할 것이다. –
내 예제는 실제 클래스의 매우 쉬운 버전이지만 실제 클래스에서는 다음과 같은 구조가됩니다. 표 U ({5,1,10}); 그 작품!, 그것은 그것을 테스트 :) 지금 내가 생각하는 매트릭스 <2> m2(); –
@ MariusKüpper : 투기와 환상은 결코 C++을 배울 수있는 좋은 방법이 아닙니다 :-( –