A<F>::f()
クラス内からクラス関数を呼び出そうとしていますが、オブジェクト( )をインスタンス化してそのメンバー関数()を呼び出すとS
、次のエラーが発生します。S
S<int>s
f
s.f()
source.cpp:''のインスタンス化
int S<F>::f() [with F = int]
:
source.cpp:30:21:ここから必要です
source.cpp:22:25:エラー:' 'は' 'A<int>
のアクセス可能なベースではありませんS<int>
return A<F>::f();
これは、クラスの宣言内S
を。に置き換えると機能することに注意してくださいreturn C<A, F>::f();
。しかし、なぜ私はそれを他の方法で行うことができないのか疑問に思っています...
#include <iostream>
template <typename T> class A {
public:
int f();
};
template <typename T> int A<T>::f() {
return sizeof(T);
}
template <template <typename> class E, typename D> class C : E<D> {
public:
int f() {
return E<D>::f();
}
};
template <typename F> class S : C<A, F> {
public:
int f() {
return A<F>::f();
}
};
int main() {
S<int>s;
std::cout << s.f();
}
任意の助けをいただければ幸いです。さらに詳しい説明が必要な場合は、お気軽にコメントしてください。
アップデート
この質問は解決されたので、実際に機能したコードを投稿する必要があると思います。
#include <iostream>
template <typename T> class A {
public:
int f();
};
template <typename T> int A<T>::f() {
return sizeof(T);
}
template <template <typename> class E, typename D> class C : public E<D> {
public:
int f() {
return E<D>::f();
}
};
class S : public C<A, int> {};
int main() {
S s;
std::cout << s.f(); // 4
}