2014-11-29 2 views
0

이 예제가 있습니다. 행렬의 클래스이며 행렬의 차원이 템플릿 인수로 제공됩니다.템플릿 클래스의 대입 연산자

template <std::size_t DIM> 
class Matrix { 
    // ... 
}; 

int main() 
{ 
    Matrix<2> m2; 
    Matrix<4> m4; 

    m2 = m4; 
} 

와트 내 대입 연산자는 4 2에서 m2의하여 DIM을 변경하려면 봐야합니까?

+5

'Matrix <2> m2();'는 행렬 객체를 인스턴스화하지 않습니다. 그것은 함수를 선언 할 것이다. –

+0

내 예제는 실제 클래스의 매우 쉬운 버전이지만 실제 클래스에서는 다음과 같은 구조가됩니다. 표 U ({5,1,10}); 그 작품!, 그것은 그것을 테스트 :) 지금 내가 생각하는 매트릭스 <2> m2(); –

+5

@ MariusKüpper : 투기와 환상은 결코 C++을 배울 수있는 좋은 방법이 아닙니다 :-( –

답변

4

와트 내 할당 연산자 한 4 2에서 m2의 희미한을 변경하려면보고 않습니다는?

당신은 그렇게 할 수 없습니다. 불가능합니다.

개체의 클래스 형식의 템플릿 인수를 변경할 수 없습니다. 런타임에 변경할 수있는 동적 형식이 아닌 형식의 정적 속성입니다.

int을 값 4에서 값 3으로 변경할 수 있지만 long으로 변경할 수는 없습니다. 마찬가지로 Matrix<2>의 값을 변경할 수는 있지만 유형을 Matrix<4>으로 변경할 수는 없습니다.

m2 = m4을 할 방법이 없으며 의미있는 의미가 있습니다. 그래서 그 m_dim 값을 변경할 수 있습니다 유형에 할당

class Matrix { 
    std::size_t m_dim; 
    // ... 
}; 

지금 당신이 런타임에 값을 변경할 수 있습니다

은 아마 당신은 차원이 유형의 동적 특성이 아닌 템플릿 인수되고 싶어요.

6
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; 
    } 

}; 
+0

그래, 그게 내가 시도하지만 그것은 운영자의 OtherDim에 DIM을 변경하는 방법을 모르겠다 –

+0

대답을 편집 할 것입니다 –

+2

당신은 Dim 유형을 변경할 수 없습니다 그리고 당신은 개체의 변경할 수 없습니다 –

관련 문제