我有一个C++模板类(在Qt中)应该处理自定义项列表.这个类有一个简单的成员函数,它应该调用模板类型的构造函数并将创建的项添加到列表中.
void CustomList::addElement(void)
{
T *element = new T();
// ...
}
Run Code Online (Sandbox Code Playgroud)
但我有一个问题:我希望这个函数能够调用重载的构造函数.
我以为我可以给它应该在构造函数中使用的参数.因此,它将作为参数调用addElement()的参数的"副本".
除了我不知道有多少,只有他们的类型.我能做到的任何简单方法吗?
因此,它将作为参数调用addElement()的参数的"副本".
为何可以使用原始参数进行复制?
使用C++ 11,您可以使用可变参数模板并完美转发:
template <typename... Args>
void CustomList::addElement(Args&&... args)
{
T *element = new T(std::forward<Args>(args)...);
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果没有适当的C++ 11支持,您将不得不addElement为每个参数量重载函数(模板),直到达到合理的限制.即
template <typename Arg1>
void CustomList::addElement(Arg1 const& arg1)
{
T *element = new T(arg1);
// ...
}
template <typename Arg1, typename Arg2>
void CustomList::addElement(Arg1 const& arg1, Arg2 const& arg2)
{
T *element = new T(arg1, arg2);
// ...
}
// [...]
Run Code Online (Sandbox Code Playgroud)