我想在我的“myArgs 类”中实现一个完美的转发构造函数,它应该只涉及myClassBase<>
. 粗略地说:为每个变体调用此构造函数myClassBase<>
但它不会编译:'<function-style-cast>' : cannot convert from 'myClass' to 'myArgs'.
我认为这是因为编译器无法推断出Args&&
to myClassBase<T, D>
。
请参阅这个(非常基本的)示例:
template <class T, class D>
class myClassBase
{
private:
T data;
D data2;
};
typedef myClassBase<char, int> myClass;
class myArgs
{
public:
myClass m_data;
template <class T, class D>
myArgs(myClassBase<T, D>&& rhs) :
m_data(std::forward< myClassBase<T, D> >(rhs))
{
}
};
template <class... Args>
void var_args(Args&&... args)
{
myArgs( std::forward<Args>(args)... );
}
测试东西:
myClass x;
var_args(x);
如果我将 var_args 函数参数从更改void var_args(Args&&... args)
为void var_args(Args... args)
它可以工作。
顺便提一句。在我的真实代码中,myClass 当然支持移动语义。
提前致谢。基督教。