テンプレートクラスの継承と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が定義されていない旨のエラーが出てしまう。

解決するには:

  1. ClassA::m_testで参照
  2. using ClassA::m_test;
  3. this->m_test

するといいらしい。

STLでは基底クラスをtypedefして、_Mybase::ほげという記述が見られる。(by h0shuさん)

this->という書き方は度々みたことがあったけど、こういう意味があったのね。