使用模板参数的模板模板参数

托本

我目前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 classlike MyHub,它可以接受of的实现MyInterface并提供某些static方法来使用like static T Foo()

然后我尝试使用MyHub

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

    return 0;
}

不幸的是,我总是最终得到一个错误,指出Tstatic T Foo()在MyHub中的)类型没有命名类型。

我希望它能起作用,因为

  • 模板参数的模板参数Impl名为T
  • MyHub 是具有一个模板参数的模板化类,并包含一个方法 Foo

到目前为止,在浏览了文档和Google搜索结果之后,我找不到针对此问题的解决方案,因此希望你们中的一些人能对我有所帮助。

a_pradhan

您可以使用typedefs。另外,由于您的实现类不是模板类,因此不需要模板模板参数。

#include <iostream>
#include <string>

template<typename T>
struct MyInterface
{
    virtual T Foo() = 0;
    typedef T Type;
};

class MyIntImpl : public MyInterface<int>
{
public:
    int Foo() { return 2; }
};

class MyStringImpl : public MyInterface<std::string>
{
public:
    std::string Foo() { return "haha"; }
};

template<class ImplType>
class MyHub
{
public:
    static typename ImplType::Type Foo()
    {
        ImplType i;
        return i.Foo();
    }

private:
    MyHub() { }
    ~MyHub() { }
};

int main()
{
    std::cout << MyHub<MyIntImpl>::Foo() << "\n"; // prints 2
    std::cout << MyHub<MyStringImpl>::Foo() << "\n"; // print haha
    return 0;
}

是一个例子。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

模板参数 SFINAE 不使用模板参数

来自分类Dev

嵌套模板(模板模板参数)

来自分类Dev

模板类的模板参数

来自分类Dev

模板模板参数方案

来自分类Dev

使用当前模板作为模板参数之一的模板参数

来自分类Dev

推导模板参数的模板参数

来自分类Dev

模板参数的C ++模板参数

来自分类Dev

使用模板类作为模板参数

来自分类Dev

正确使用C ++模板模板参数

来自分类Dev

使用模板模板参数进行前偏

来自分类Dev

使用类模板需要模板参数

来自分类Dev

使用模板参数实例化模板类

来自分类Dev

模板类,不使用模板参数

来自分类Dev

使用模板模板参数进行正偏

来自分类Dev

如何使用模板模板参数专门化类模板?

来自分类Dev

在C ++中使用功能模板作为模板模板参数

来自分类Dev

评估模板的C ++模板参数(模板模板参数)

来自分类Dev

模板功能作为模板参数

来自分类Dev

模板模板参数和clang

来自分类Dev

通用引用模板模板参数

来自分类Dev

类模板:限制模板参数

来自分类Dev

以模板作为模板参数的功能

来自分类Dev

模板类作为模板参数

来自分类Dev

模板模板非类型参数

来自分类Dev

模板模板参数推导指南

来自分类Dev

模板功能作为模板参数

来自分类Dev

以模板作为模板参数的功能

来自分类Dev

模板模板参数与功能模板的等效行为

来自分类Dev

模板模板参数与功能模板的等效行为