C++ 可变模板构造模板列表
在下面的代码中,如何使用列表b来创建对象_b,就像使用列表a手动创建对象_a一样C++ 可变模板构造模板列表,c++,templates,variadic,C++,Templates,Variadic,在下面的代码中,如何使用列表b来创建对象_b,就像使用列表a手动创建对象_a一样 #include <list> template <int...Args> class Object {}; int main() { std::list<int> a = {1,2,3,4,5}; Object<1,2,3,4,5> object_a; std::list<int> b; // do whateve
#include <list>
template <int...Args>
class Object {};
int main() {
std::list<int> a = {1,2,3,4,5};
Object<1,2,3,4,5> object_a;
std::list<int> b;
// do whatever with b
// Object< ? > object_b; // how to use b to create object_b?
}
#包括
样板
类对象{};
int main(){
列表a={1,2,3,4,5};
对象a;
std::列表b;
//对b做什么都行
//Object<?>Object_b;//如何使用b创建Object_b?
}
我的最佳解决方案是:
#include <list>
template <std::list<int>& L>
class Object {};
std::list<int> globalList;
int main() {
std::list<int> a = {1,2,3,4,5};
globalList = a;
Object<globalList> object_a;
}
#包括
样板
类对象{};
std::列出全球列表;
int main(){
列表a={1,2,3,4,5};
globalList=a;
对象a;
}
还有更好的主意吗?有没有办法不引入全局变量?您是否要求能够使用与std::list相同的语法构造对象 您可以使用std::initializer\u list来实现这一点
class Object{
Object(const std::initialize_list<int>& vars)
{
// do stuff with the vars.
}
};
这在C++中是不可能的。无法将运行时对象转换为编译时模板。
列表a
未用于创建对象a
(手动或其他方式)。这是不可能的。也许你想改用std::tuple
?好吧,我使用a的元素创建了带有模板参数的对象。只要我可以在类中使用这些元素来做任何事情,我更改模板的性质就可以满足我的需要。但我现在不喜欢全局变量进入画面。我认为0x499602D2使用std::tuple的建议将避免创建全局变量,对吗?@cantcooseUserNames。对不起,我没有看到你的链接。谢谢你帮我把代码打出来。非常感谢,不用了。对象不是单个类,而是由(任意多个)整数以任何形式参数化的一系列类。然后,我想使用已知的int列表(或元组或其他)创建对象族的特定类的实例。
Object my_object = {1, 2, 3, 4};