提问人:Blind Guardian 提问时间:8/13/2021 最后编辑:YksisarvinenBlind Guardian 更新时间:8/13/2021 访问量:69
如何使模板重载复制构造函数?
How to make a template overload the copy constructor?
问:
在尝试使用模板函数作为复制构造函数时,(我该怎么做)我只想出了 3 个解决方案:
结构 A:
template <typename D> A(const D&) {};
A(A& f) : A(const_cast<const A&>(f) {};
但是,如果我从这个函数继承,它们将有一个非 const-reference 默认复制构造函数。
反之亦然:
template <typename D> A(D&) {};
A(const A& f) : A(const_cast<A&>(f) {};
将避免对常量正确性的静态检查。
我试过了,但我不知道如何参数化构造函数,所以我想到了。但这是不可接受的,因为调用方编译的代码有责任添加 0 默认参数。<-- 这是另一个问题,如何在没有模板参数推导的情况下对构造函数进行参数化?template <typename D, int> A(D&) {};
<typename D> A(D&, int e=0) {};
我想把它封装在一个(constexpr)类中,但对于这么简单的事情来说,污染太多了?.
请注意,制作单独的函数不起作用,因为它错过了初始值设定项。我想通过更改模板来更改复制构造函数,在可能不同的文件中。
答: 暂无答案
评论
const &
const_cast