わからないことを解決する~継承とクラステンプレート~
さて、あるクラスで別のクラスを使おうとしました。その時に使うクラスがわかっていないのでクラステンプレートを使うほかありません。
template<class T>
class I_SpeedChange{
~~省略~~
};
class proportional : private I_SpeedChange{
~~省略~~
};
これでコンパイルすると
クラス テンプレート "base" の引数リストがありません
と、言われてしまいました
これは困ったぞ……
いろいろ調べた結果、クラステンプレートはクラスに対してテンプレートTを提供するとのこと
つまり……
template<class T>
class base{
~~省略~~
};
template<class T>
class derived : private base{
~~省略~
};
テンプレートお前めんどくさいな
テンプレートの作用するスコープがどこの範囲かって言われたらそうなんだけどね
継承先でもテンプレート書かなきゃいけないのめんどくさすぎ……
じゃあここに親クラスの変数を呼び出してみよう
って思っていたのですが……
できないんですよこれが
色々調べた結果このサイトが見つかりました
にゃるほど~
関数つくってthis
で解決するかbase<T>::
で解決するのがいいのか
じゃあ孫クラスに継承してみようということで(菱形継承、ダイヤモンド継承)
template<class T>
class base{
~~省略~~
};
template<class T>
class derived : virtual public base{
~~省略~
};
template<class>
class derivedX : public derivedA{
~~省略~~
};
baseのサブクラスを一つしか書いていませんがいずれ増やす予定なので仮想継承しています
これで孫クラスから基底クラスへのアクセスも可能です(少なくともコンパイラ上は)
ようやくクラステンプレート解決しました
むぅ、つかれたのでちょっと休憩したいと思います
読んでいただきありがとうございました