我試圖理解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 2010-07-20 05:03:17