2つのテンプレートクラスを作成して時に一方のクラスからもう一方のクラスのメンバ変数にアクセスできたら便利だなぁと思いまして。
最初はfriendを使うことで実現できたのですが、継承でも可能なのでは??と思い試してみたのですが・・・うまくいきません。
省略していますが、以下がソースです。
C++
1 2template<class Param> 3class functions_set { 4 protected: 5 Param _max; 6 Param _num; 7 Param *_set; 8}; 9 10template<class Param> 11class functions_double_set : public functions_set<Param> { 12 private: 13 typedef class functions_set<Param> func; 14 public: 15 void assign(func *, const func *); 16 int equal(func *, func *); 17 func* Union(func *, const func *, const func *); 18 func* intersection(class functions_set<Param> *, const class functions_set<Param> *, const class functions_set<Param> *); 19 func* difference(class functions_set<Param> *, const class functions_set<Param> *, const class functions_set<Param> *); 20};
1,
色々とごちゃごちゃなのですが、名前が長いのでtypedefを使おうとしたのですが、派生クラスのprivateのなかのtypedefはエラーです。
逆に継承しない実装だと問題ありません。
他に長い名前を置き換える手段はありませんか??
usingもなんかエラーが出てきます。
typedefを使わないで長い名前のままで記述すると問題なく動作します。
2,
続いて、以下のようにオブジェクトを作成するとエラーです。
functions_double_set<int> funcs;
これも継承すると出てくるエラーです。
error: use of deleted function ‘functions_double_set<int>::functions_double_set()’
なんですかこれは??
どうすればできるのでしょうか??
3,
テンプレートにすると
基底クラスのメンバにアクセスできない。
protectedを付けているので派生クラスからメンバ変数へアクセスは可能であるはずです。
これは、以下のサイトで解決しました。
テンプレートクラスの継承
なぜテンプレートにした途端に、thisを付けなくてはいけないんでしょうか?
テンプレートクラス&継承が少々難しいです。
おまけに派生クラスのメンバ関数のパラメータには、基底クラスを代入しなくてはいけないので、なお頭が痛いです。
要はfriend以外で基底クラスのメンバ変数を参照できるようにしたいのです。
継承でもできるはずなのでわかる方教えてください。
環境はlinux 64bit gcc です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/09 14:23
2018/01/09 14:25
2018/01/09 14:28
2018/01/09 14:37
2018/01/09 15:00
2018/01/09 15:26
2018/01/09 15:32