相关疑难解决方法(0)

如何使用unique_ptr执行dynamic_cast?

我有一个类层次结构如下:

class BaseSession : public boost::enable_shared_from_this<BaseSession>
class DerivedSessionA : public BaseSession
class DerivedSessionB : public BaseSession
Run Code Online (Sandbox Code Playgroud)

在派生类函数中,我经常调用这样的函数:

Func(boost::dynamic_pointer_cast<DerivedSessionA>(shared_from_this()));
Run Code Online (Sandbox Code Playgroud)

由于我正在与shared_ptr管理会议,这工作正常.最近,我发现我shared_ptr对这种情况的使用不是最佳的.这是因为这些会话是单个对象,每个客户端维护一个套接字.如果重新连接套接字,则会话副本将成为僵尸.

作为解决方法,我开始通过shared_ptr引用传递而不是复制.这解决了僵尸问题.

理想情况下,我觉得我应该unique_ptr用来存储会话,然后将引用传递给其他函数.这打开了一大堆蠕虫.

如何将基类unique_ptr对象转换为派生类unique_ptr对象?unique_ptr以下行的版本是什么?

Func(boost::dynamic_pointer_cast<DerivedSessionA>(shared_from_this()));
Run Code Online (Sandbox Code Playgroud)

我只想要一个会话对象的副本,其他一切都应该是参考.

c++ boost dynamic-cast smart-pointers unique-ptr

21
推荐指数
2
解决办法
2万
查看次数

C++访问存储在向量中的对象的元素

比如说你有:

class Plant {
    public:
    ...public accessors, etc ...

}
Run Code Online (Sandbox Code Playgroud)

然后你有一个特定的植物类:

class Broccoli : public Plant
{
    public:
        Broccoli(int i);
        virtual ~Broccoli();

        inline BroccoliSprite* getPlantSprite() { return _plantSprite; };

    private:
         BroccoliSprite* _plantSprite;

};
Run Code Online (Sandbox Code Playgroud)

在某些时候,Broccoli对象存储在向量中:std::vector<Plant> vPlants;

访问我使用的向量及其元素: inline std::vector<Plant>& getPlants() { return vPlants; };

访问:

 for (int f=0; f < _f.getPlants().size(); f++)
 {
    Plant _p1 = _f.getPlants().at(f);

    cocos2d::CCSprite* s = _p1.getPlantSprite();
    ....


 }
Run Code Online (Sandbox Code Playgroud)

我希望能够用getPlantSprite()它来显示给用户,但编译器告诉我:No member named 'getPlantSprite' in 'Plant'

这是真的,但是向量中的对象是类型Plant并且包含一个成员变量,它是我需要的精灵,getter返回它.

我不明白的是如何获得访问权限 getPlantSprite()

我想有一点是我可以改变 …

c++ class vector c++11

0
推荐指数
1
解决办法
1635
查看次数

标签 统计

c++ ×2

boost ×1

c++11 ×1

class ×1

dynamic-cast ×1

smart-pointers ×1

unique-ptr ×1

vector ×1