一般问题:如果不考虑它是否是一个好主意,我如何将一个隐式转换运算符添加到已经定义的类中?例如,假设我想要unique_ptr <T>隐式转换为T*,但我不能只添加成员转换运算符,因为我无法更改unique_ptr类的定义.
选项:
是否有一些c ++巫毒可以用来实现这一点而无需创建成员函数?
答案 - 远:没有.
无法从无法在代码中修改的类型添加隐式转换.
只是......悲伤.
我可以从std :: unique_ptr派生并添加我自己的成员转换函数吗?这有什么严重的缺点吗?
Answer-So-Far:是的(来自vsoftco)
下行尚未确定.到目前为止继承自std :: unique_ptr,继承其构造函数,并声明一个隐式转换运算符,几乎没有任何需要编写的代码.
我将不得不在余生中生活吗?
答案 - 迄今为止:我们会看到......
如果我可以选择2运行而没有任何严重的副作用或负担,我会测试一段时间并报告我是否认为值得.走着瞧!
示例代码:
#include <algorithm>
#include <memory>
#include <vector>
struct MyClass
{
MyClass(int v) : value(v) {}
int value;
};
int main()
{
auto vec = std::vector<std::unique_ptr<MyClass>>();
vec.push_back(std::make_unique<MyClass>(1));
vec.push_back(std::make_unique<MyClass>(2));
// error C2664: 'void (__vectorcall *)(MyClass *)' : cannot convert argument 1 from 'std::unique_ptr<MyClass,std::default_delete<_Ty>>' to 'MyClass *'
std::for_each(std::begin(vec), std::end(vec), [](MyClass* myClass)
{
myClass->value += 3;
});
}
Run Code Online (Sandbox Code Playgroud)