【发布时间】:2015-09-25 22:53:49
【问题描述】:
为什么下面的代码不能编译:
struct a
{
int i;
};
template <typename T>
class b
{
public:
T mItem;
template <typename... Arguments>
b(Arguments&&... args) : mItem(std::forward<Arguments>(args)...)
{
}
};
int _tmain(int argc, _TCHAR* argv[])
{
b<a>(1);
return 0;
}
错误 C2664: 'a::a(const a &)' : 无法从 'int' 转换参数 1 到 'const a &'
但是像这样简单地添加一个额外的参数就可以编译:
struct a
{
int i;
};
template <typename T>
class b
{
public:
T mItem;
template <typename... Arguments>
// just random extra argument
b(int, Arguments&&... args) : mItem(std::forward<Arguments>(args)...)
{
}
};
int _tmain(int argc, _TCHAR* argv[])
{
b<a>(1);
return 0;
}
有没有比简单地向 b 的构造函数添加一个额外的(无用的)参数更简洁的方法?
【问题讨论】:
-
因为值初始化、聚合初始化和所有的爵士乐。
标签: c++ c++11 visual-studio-2013