テンプレートクラスの継承とthis->
テンプレートクラスを継承しても、親クラスのメンバ変数が解決できない問題に突き当たった。
ネタ切れなのでまた#lowhacks@irc.freenode.netのまとめ。
生ログ:http://irc.nyaxtstep.com/lowhacks/2008.04.12.txt
thanks to: planetさん、h0shuさん
template<typename T> class ClassA { protected: int m_test; }; template<typename T, typename T2> class ClassB : public ClassA<T2> { public: void test_method() { m_test = 3; } };
これをg++でコンパイルしようとすると、m_testが定義されていない旨のエラーが出てしまう。
解決するには:
- ClassA
::m_testで参照 - using ClassA
::m_test; - this->m_test
するといいらしい。
STLでは基底クラスをtypedefして、_Mybase::ほげという記述が見られる。(by h0shuさん)
this->という書き方は度々みたことがあったけど、こういう意味があったのね。