環境
・Visual Studio 2019
・C++
質問内容
C++で子クラスのテンプレート引数を親クラスに適用する方法についてお聞きしたいです。
以下のコードのように、Temp2にテンプレート引数で渡した値Cを、
親クラスであるTemp1のテンプレート引数に渡そうとしています。
C++
1template<int A, int B> 2class Temp1 3{ 4public: 5 void func1() 6 { 7 printf("testA : %d\n", A); 8 printf("testB : %d\n", B); 9 } 10}; 11 12template<int C> 13class Temp2 : public Temp1<5, C> //★子クラスのテンプレート引数を親クラスに適用 14{ 15public: 16 void func2() 17 { 18 func1(); 19 printf("testC : %d\n", C); 20 } 21}; 22 23int main() 24{ 25 Temp2<15> t2; 26 t2.func2(); 27}
ですが、この場合、func2()実装中のfunc1()を読んでいる行で
'func1': 識別子が見つかりませんでした
というコンパイルエラーが出てしまいます。
★の行を、
C++
1template<int C> 2class Temp2 : public Temp1<5, 10>
などと書くと、コンパイルも通り、問題なく動作しています。
出力結果は以下の通りです。
C++
1testA : 5 2testB : 10 3testC : 15
今回のように、子クラスのテンプレート引数を親クラスのテンプレート引数に使うことは不可能なのでしょうか?
解決方法や代案などお分かりになる方がいらっしゃれば、お教え頂ければ幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー