固定向量作为c ++类的模板参数

时间:2017-12-05 15:17:55

标签: c++ templates

我想创建一个这样的类:

template<std::vector<char> ID>
class test
{
      std::vector<char> m_id=ID;
 public:
      std::vector<char> getID()
      { 
           return ID;
      }
}

然后使用如下:

typedef test1234 test<{'1','2','3','4','5'}>
test1234 t1;
std::cout <<t1.getID()<<std:;endl;

我该怎么做?

我的想法是我可以定义几个具有相同功能但不同ID的类。我不想将ID作为构造参数传递(我知道如何做到这一点!)。

我正在使用VS 2013.

1 个答案:

答案 0 :(得分:0)

如果您将问题从“如何使用模板参数初始化矢量”(对VS2013没有解决方案)更改为“如何使用模板参数进行参数化的不同构造函数”,那么我有一个解决方案。你应该定义字符串数组并传递该数组的下标,这样就可以了:

std::string initializers[]={{'1','2','3','4','5'},"Hello moto"};

template<int ID>
class test
{
      std::vector<char> m_id{initializers[ID].begin(),initializers[ID].end()};
 public:
      std::vector<char> getID()
      { 
           return  std::vector<char> {initializers[ID].begin(),initializers[ID].end()};
      }
};

这将使以下有效:

int main()
{
    typedef  test<1> test1234;
    test1234 t1;
    std::cout <<t1.getID()[0] <<std::endl; // you obviously do not have stream output operator for vector
}

根据您的喜好添加const,如果需要,可能会封装initializers