- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这可能可以推广到任何模板化类,但我已经用 shared_ptr 遇到过这个问题。我有这样的类(class)系统:
class A {
protected:
// some data
}
class B : public A {
// some access functions
}
class C : public A {
// some other access functions
}
我使用这个概念是因为在我的库中我使用了一组不应向用户公开的函数,所以我将这些函数分为两个接口(interface)类。现在,我知道我可以使用一个类和 friend ,但如果需要多个类来访问这些函数,这会变得很难看。
但是,我的问题是这些类在 shared_ptr
中传递我需要保留引用计数(因为数据会被破坏)。因此我需要在这个例子中转换 shared_ptr<B>
至 shared_ptr<C>
反之亦然。是否shared_ptr
如果提供了所需的功能,则允许这样的事情,如果是的话,那些是什么?构造函数?分配运算符?还是我需要更上一层楼,提出完整的建议,而不仅仅是内容?到目前为止我没有运气。
是的,如果您有更好/更简洁的方法来隐藏某些功能,我会很高兴听到,但我也希望这个问题得到回答。
最佳答案
你想要std::static_pointer_cast
和 std::dynamic_pointer_cast
, 来自 <memory>
:
struct A {}; struct B : A {};
std::shared_ptr<B> p(std::make_shared<B>());
std::shared_ptr<A> q(std::static_pointer_cast<A>(p));
// now p and q **share** ownership over their pointed-to object.
关于c++ - 专门的 shared_ptr 转换 C++0x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9541168/
我有一个带有模板函数的基类,该函数具有通用模板类型和专用版本。 #ifndef BASE_CLASS #define BASE_CLASS #include using namespace std;
我有这个 3D vector 模板 template class Vec3TYPE{ public: union{ struct{ TYPE x,y,z; }; struct{ TY
我是一名优秀的程序员,十分优秀!