0

在尝试使用模板函数作为复制构造函数时,(我该怎么做)我只想出了 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)类中,但是对于这么简单的事情来说太多了?.

请注意,制作单独的函数不起作用,因为它错过了初始化程序。我想通过在一个可能不同的文件中更改模板来更改复制构造函数。

4

0 回答 0