私は現在template
、C ++で s をいじっていて、 template template parameters
.
次のクラスがあるとしましょう。
template<typename T>
struct MyInterface
{
virtual T Foo() = 0;
}
class MyImpl : public MyInterface<int>
{
public:
int Foo() { /*...*/ }
};
template< template<typename T> typename ImplType>
class MyHub
{
public:
static T Foo()
{
ImplType i;
return i.Foo();
}
private:
MyHub() { }
~MyHub() { }
};
本質的に、static class
likeMyHub
の実装を受け入れ、それらを使用MyInterface
する特定のstatic
メソッドを提供する like が必要static T Foo()
です。
それから私は使用しようとしましたMyHub
:
int main()
{
int i = MyHub<MyImpl>::Foo();
return 0;
}
残念ながら、T
( static T Foo()
MyHub の) タイプがタイプに名前を付けていないというエラーが常に表示されます。
私はそれが機能することを期待します
- テンプレート パラメータのテンプレート パラメータの
Impl
名前は T です MyHub
1 つのテンプレート パラメーターを持ち、メソッドを含むテンプレート化されたクラスです。Foo
これまでのところ、ドキュメントとGoogleの結果を掘り下げた後、これに対する解決策を見つけることができなかったので、あなたの何人かが私を助けてくれることを願っています.