这可能会推广到任何模板化的类,但我用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
是否允许这样的事情,如果是,那么这些是什么?构造函数?分配运营商?或者我是否需要更高级别并投射整个指针而不仅仅是内容?到目前为止我没有运气。
是的,如果你有一个更好/更整洁的隐藏某些功能的方法,我会很高兴听到它,但我也想回答这个问题。
答案 0 :(得分:5)
您需要来自std::static_pointer_cast
的{{1}}和std::dynamic_pointer_cast
:
<memory>