通过c ++中的包装器将参数列表传递给构造函数

时间:2015-04-10 11:34:11

标签: c++ templates boost constructor stl

我想编写一个包装器函数,我可以为一些类对象传递构造函数初始化参数。然后,此包装器将使用此列表并在定义该类的新对象时传递给构造函数。不确定要用于此目的的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;
}

提前致谢。

3 个答案:

答案 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(请参阅我对该问题的回答)。