专门的shared_ptr转换C ++ 0x

时间:2012-03-02 22:20:04

标签: c++ class c++11 type-conversion shared-ptr

这可能会推广到任何模板化的类,但我用shared_ptr遇到了这个问题。 我有类系统,如:

class A {
protected:
    // some data
}

class B : public A {
    // some access functions
}

class C : public A {
    // some other access functions
}

我正在使用这个概念,因为在我的库中我使用的是不应该向用户公开的函数集,所以我将这些函数分成两个接口类。现在,我知道我可以使用一个班级和朋友,但如果需要多个班级来访问这些功能,这会变得很难看。

但是,我有问题是这些类在shared_ptr中传递,我需要保留引用计数(因为数据会被破坏)。因此,我需要在此示例中将shared_ptr<B>转换为shared_ptr<C>,反之亦然。如果提供了所需的功能,shared_ptr是否允许这样的事情,如果是,那么这些是什么?构造函数?分配运营商?或者我是否需要更高级别并投射整个指针而不仅仅是内容?到目前为止我没有运气。

是的,如果你有一个更好/更整洁的隐藏某些功能的方法,我会很高兴听到它,但我也想回答这个问题。

1 个答案:

答案 0 :(得分:5)

您需要来自std::static_pointer_cast的{​​{1}}和std::dynamic_pointer_cast

<memory>