我想编写一个包装器函数,我可以为一些类对象传递构造函数初始化参数。然后,此包装器将使用此列表并在定义该类的新对象时传递给构造函数。不确定要用于此目的的STL或任何其他数据类型。基本上在下面的代码中, argument_list 应该使用哪种数据类型。任何可以提供帮助的图书馆?
透视的一些代码
class abc{
int a_;
char b_;
public:
abc(int a, char b)
:a_(a), b_(b)
{
}
}
// Wrapper
template <typename T>
void create_object_wrapper(argument_list list) // assuming argument_list can
//hold the parameters as
//intended
{
abc v1(list); //The use case I want
}
int main()
{
create_object_wrapper(1,'a'); // initialize object with (1, 'a')
return 0;
}
提前致谢。
答案 0 :(得分:4)
使用variadic完美转发:
template <typename... Args>
void create_object_wrapper(Args&&... list)
{
abc v1(std::forward<Args>(list)...);
}
答案 1 :(得分:1)
使用模板参数包:
template <typename... Args>
void create_object_wrapper(Args... list)
{
abc v1(list...);
}
如果使用导致无效abc
构造函数调用的参数调用,则无法编译。
答案 2 :(得分:0)
如果你想立即从提供的参数创建对象,那么请按照sehe的回答。
如果要存储提供的参数以便稍后创建一个或多个对象,则应使用std::tupel
。按照this question中给出的答案来了解如何做到这一点。理想情况下,您希望使用C ++ 14(请参阅我对该问题的回答)。