未定义的参数列表
Undefined argument list
我有一个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);
// ...
}
// [...]
相关文章:
- 概念中的cv限定符需要表达式参数列表
- 在卡萨布兰卡形成编码参数的列表
- 在没有参数列表的情况下使用模板名称"Event"无效,模板问题
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- 列表参数的类型定义
- std::vector 没有重载函数的实例与参数列表匹配
- 模板参数列表中的 false 在模板初始化期间计算为什么?
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- 如何在不强制转换每个参数的情况下删除初始值设定项列表中从 int 到 char 的缩小转换?
- 构造函数/函数声明参数列表中的统一初始化
- 模板化检查是否存在带有参数列表的类成员函数?
- 没有函数模板的实例"max"与参数列表参数类型匹配(int、int)
- 具有泛型列表参数和委托的函数
- 海湾合作委员会拒绝列表参数的初始化
- 为什么初始化构造函数列表参数时会发生异常?
- 简单变量列表参数C++
- 具有列表参数C++11/C++14样式的求和函数
- c++初始化列表——参数来自构造函数体本身
- 一种更有效的处理循环内列表参数的方法