2

使用时,如果 U 是 T 的基数,则std::shared_ptr<>可以从shared_ptr<T>to 转换。shared_ptr<U>

我正在尝试实现相同的目标,我有一个包装指针的模板类,并且我希望相同的派生到基转换工作,这是如何完成的?

4

1 回答 1

5

这可以通过以下两种方式之一完成:

  • 转换构造函数
  • 转换运算符

例子:

template <typename T>
class MyClass {
public:
    // converting constructor
    template <typename U>
    explicit MyClass(MyClass<U> const& other);

    // converting operator
    template <typename U>
    explicit operator MyClass<U>() const; // explicit here is C++11 only
};

如果你两者都做,不幸的是你会有模棱两可的转换。就我个人而言,我发现转换构造函数更容易(并且更惯用),并将转换运算符的使用保留在我无法修改转换为类(不是我的代码)的情况下。

于 2013-08-04T10:46:24.733 回答