ublas에서 사용되는 패턴을 이해하려고합니다. 패턴은 다음과 같습니다C++ 상속 패턴 + CRTP
struct vector : vector_expression<vector>
곳 vector_expression이 같다 :
template<class E>
class vector_expression {
...
// no constructor or E pointer/reference in class
//
const E &operator()() const {
return *static_cast<const E*>(this);
}
완전한 소스 코드는 여기에 있습니다 : http://www.tena-sda.org/doc/5.2.2/boost/dd/d44/vector__expression_8hpp-source.html#l00088
제 질문은, *static_cast<const E*>(this)
작업을 수행하는 방법? 상속에 의지합니까?
다음 질문 : 나는
template<class E>
class vector_expression2 : private vector_expression<E>
{
//friend class ublas::vector_expression<E>; // this is the fix
typedef vector_expression<E> base;
const E& operator()() const { return base::operator()(); }
};
을 유도 경우 내가 정적 캐스트에 액세스 할 수 vector_expression
기지에 대한 컴파일러 오류가 발생합니다. 왜 그렇게됩니까?
고맙습니다.
죄송합니다. 원래 게시글을 엉망으로 만들고 설명을 변경했습니다. – Anycorn