小编Isa*_*nes的帖子

添加从unique_ptr <T>到T*的隐式转换

一般问题:如果不考虑它是否是一个好主意,我如何将一个隐式转换运算符添加到已经定义的类中?例如,假设我想要unique_ptr <T>隐式转换为T*,但我不能只添加成员转换运算符,因为我无法更改unique_ptr类的定义.

选项:

  1. 是否有一些c ++巫毒可以用来实现这一点而无需创建成员函数?
    答案 - 远:没有.
    无法从无法在代码中修改的类型添加隐式转换.
    只是......悲伤.

  2. 我可以从std :: unique_ptr派生并添加我自己的成员转换函数吗?这有什么严重的缺点吗?
    Answer-So-Far:是的(来自vsoftco)
    下行尚未确定.到目前为止继承自std :: unique_ptr,继承其构造函数,并声明一个隐式转换运算符,几乎没有任何需要编写的代码.

  3. 我将不得不在余生中生活吗?
    答案 - 迄今为止:我们会看到......
    如果我可以选择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)

c++ unique-ptr implicit-conversion

7
推荐指数
1
解决办法
1064
查看次数

标签 统计

c++ ×1

implicit-conversion ×1

unique-ptr ×1