2

私は現在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 classlikeMyHubの実装を受け入れ、それらを使用MyInterfaceする特定のstaticメソッドを提供する like が必要static T Foo()です。

それから私は使用しようとしましたMyHub

int main()
{
    int i = MyHub<MyImpl>::Foo();

    return 0;
}

残念ながら、T( static T Foo()MyHub の) タイプがタイプに名前を付けていないというエラーが常に表示されます。

私はそれが機能することを期待します

  • テンプレート パラメータのテンプレート パラメータのImpl名前は T です
  • MyHub1 つのテンプレート パラメーターを持ち、メソッドを含むテンプレート化されたクラスです。Foo

これまでのところ、ドキュメントとGoogleの結果を掘り下げた後、これに対する解決策を見つけることができなかったので、あなたの何人かが私を助けてくれることを願っています.

4

4 に答える 4