像shared_ptr <t> </t>这样的隐式转换

时间:2013-08-04 10:27:20

标签: c++ templates casting

使用std::shared_ptr<>时,如果U是T的基础,则可以从shared_ptr<T>投射到shared_ptr<U>

我正在尝试实现相同的目标,我有一个包装指针的模板类,我希望同样的派生到基础的转换工作,这是怎么做的?

1 个答案:

答案 0 :(得分: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
};

如果您同时执行这两项操作,那么很遗憾,您的转换模糊不清。我个人认为转换构造函数更容易(更惯用)并保留使用转换运算符的情况,当我无法修改转换为类(而不是我的代码)时。

相关问题