我想创建一个这样的类:
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.
答案 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
。