在尝试使用模板函数作为复制构造函数时,(我该怎么做)我只想出了 3 个解决方案:
结构 A:
template <typename D> A(const D&) {};
A(A& f) : A(const_cast<const A&>(f) {};
但是如果我从这个函数继承,他们将有一个非常量引用的默认复制构造函数。
反之:
template <typename D> A(D&) {};
A(const A& f) : A(const_cast<A&>(f) {};
将避免对 const 正确性进行静态检查。
我试过了,template <typename D, int> A(D&) {};
但我不知道如何参数化构造函数,所以<typename D> A(D&, int e=0) {};
我想到了。但这将是不可接受的,因为调用者编译代码的责任是添加该 0 默认参数。<-- 这又是一个问题,在没有模板参数推导的情况下,如何对构造函数进行参数化呢?
我想把它封装在一个(constexpr)类中,但是对于这么简单的事情来说太多了?.
请注意,制作单独的函数不起作用,因为它错过了初始化程序。我想通过在一个可能不同的文件中更改模板来更改复制构造函数。