次の例のように継承のチェーンを使用すると、最も深いベースの変数を問題なく使用できます。
class A { public: int x; };
class B : public A { };
class C: public B { public: void Do() { cout << x << endl; } };
再帰的な可変個引数テンプレートクラスで同じことをすると、変数にアクセスできませんでした。変数にアクセスする方法と、変数が表示されなかった理由はありますか?
template <class ...Parms>
class Example;
template <class Head, class ...Parms>
class Example<Head, Parms...>: public Example<Parms...>
{
};
template <>
class Example<>
{
public:
int x;
};
template <class ...Parms>
class Last: public Example<Parms...>
{
void Do() { cout << x << endl; }
};
クラスのインスタンスがインスタンス化される前にコンパイルが失敗します!