未定义的参数列表

Undefined argument list

本文关键字:列表 参数 未定义      更新时间:2023-10-16

我有一个C++模板类(在Qt中),它应该处理自定义项的列表。这个类有一个简单的成员函数,它应该调用模板类型的构造函数,并将创建的项添加到列表中。

void CustomList::addElement(void)
{
    T *element = new T();
    // ...
}

但我有一个问题:我希望这个函数能够调用重载的构造函数。

我想我可以给它提供构造函数中应该使用的参数。因此,它将使用addElement()参数的"副本"作为参数进行调用。

除了我不知道他们有多少,只知道他们的类型。有什么简单的方法可以做到吗?

因此,它将被称为自变量,是自变量的"副本"给定给addElement()。

既然可以使用原始参数,为什么要复制?

使用C++11,您可以使用可变模板和完美的转发:

template <typename... Args>
void CustomList::addElement(Args&&... args)
{
    T *element = new T(std::forward<Args>(args)...);
    // ...
}

如果没有适当的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);
    // ...
}
// [...]