如果我想写一个通用的复制构造函数(一个可以接受任何参数类型的构造函数),这很容易做到:
class Widget {
public:
template<typename T> Widget(T&& other);
};
这不会阻止编译器生成传统的复制构造函数,所以我想自己编写并委托(delegate)给模板。但我该怎么做呢?
class Widget {
public:
template<typename T> Widget(T&& other);
Widget(const Widget& other): ??? {} // how delegate to the template?
};
我试过这样写委托(delegate)构造函数,
Widget(const Widget& other): Widget<const Widget&>(other){}
但是 VC11、gcc 4.8 和 clang 3.2 都拒绝它。
如何编写我正在尝试编写的委托(delegate)复制构造函数?
最佳答案
您不能为构造函数模板指定模板参数;你仅限于扣除。也许你可以改编一个 answer来自 my old posts 之一:
// NOT Tested!
#include <utility>
class Widget
{
enum fwd_t { fwd };
// Your true master constructor
template< typename T > Widget( fwd_t, T &&t );
public:
template < typename T >
Widget( T&& other );
: Widget( fwd, std::forward<T>(other) )
{}
Widget( const Widget& other )
: Widget( fwd, other )
{}
};
两个单参数构造函数转发给一个双参数兄弟构造函数。
关于c++ - 如何从复制构造函数委托(delegate)到通用复制构造函数模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15264252/