【问题标题】:Array of non-type template?非类型模板数组?
【发布时间】:2014-01-24 11:06:25
【问题描述】:

我有一个非类型模板类 Foo:

template <int n>
class Foo {
public:
  Foo(){}
};

如何在一个数组中存储该类的多个实例? (当实例都有不同的模板值时。)

但是,这不起作用:

Foo<int> myArray[] = {Foo<1>() , Foo<2>() , Foo<3>()};

编译器错误是:非类型模板参数的模板参数必须是 一个表达式

【问题讨论】:

  • 你不能。它们都是不同的类型。类模板不是类。

标签: c++ arrays templates


【解决方案1】:

Foo&lt;1&gt;Foo&lt;2&gt; 的类型不同(等等), 所以你不能将它们存储在一个数组中(如果它们派生自FooBase,你可能有一个FooBase*的数组)。

您可以将它们存储在std::tuple

auto foos = std::make_tuple(Foo<1>() , Foo<2>() , Foo<3>());

【讨论】:

    【解决方案2】:

    如前所述,Foo&lt;1&gt; 是与 Foo&lt;2&gt; 等不同的类型,因此您不能将它们存储在数组中。

    要解决这个问题,您可以取消模板类并将整数作为构造函数参数:

    class Foo {
    public:
      Foo(int n){}
    };
    
    Foo myArray[] = {Foo(1) , Foo(2) , Foo(3)};
    

    【讨论】:

      【解决方案3】:
      template <int n>
      class Foo : public Ifoo {
      public:
        Foo(){}
      };
      
      IFoo* myArray[] = {..
      

      【讨论】:

      • 那不是存储类的实例,而是存储指针。
      • 你的意思是Ifoo * myArray[] = { ...
      猜你喜欢
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      相关资源
      最近更新 更多