在shared_from_this()中的错误类型(在继承类中)(是否有dyn.type-ware shared Poi



我有一个使用enable_shared_from_this<>

的基础视图控制器类
class ViewController :
public std::enable_shared_from_this<ViewController>
{ // ...
};

和一个孩子:

class GalleryViewController : public ViewController {
     void updateGallery(float delta);
}

出现的问题是,当我尝试将当前实例传递给第三方(例如要安排在某个地方的lambda函数)

实例( GalleryViewController)会出现一个(罕见的)条件,所以我无法直接捕获'this',我需要用 shared_from_this()捕获共享组:

void GalleryViewController::startUpdate()
{
    auto updateFunction = [self = shared_from_this()](float delta)
    {
        return self->updateGallery(delta); // ERROR: ViewController don't have updateGallery() method!
    };
    scheduler->schedule(updateFunction); // takes lambda by value
}

问题是shared_from_this()返回没有updateGallery()方法的shared_ptr<ViewController>

我真的很讨厌做dynamic_cast(在这种情况下甚至是静态的)这是一场维护噩梦。代码很丑!

updateFunction = [self = shared_from_this()](float delta)
    {
            auto self2 = self.get();
            auto self3 = (UIGalleryViewController*)self2;
            return self3->updateGallery(delta);
    };

是否有任何默认模式可以解决此问题?动态型意识到共享指针?我应该用 enable_shared_from_this<GalleryViewController>加倍继承子类吗?

void GalleryViewController::startUpdate(bool shouldStart)
{
    if (shouldStart == false) {
    updateFunction = [self = shared_from_this()](float delta)
    {
        return self->updateGallery(delta); // ERROR: ViewController don't have updateGallery() method!
    };
    scheduler->schedule(updateFunction); // takes lambda by value
}

问题是shared_from_this()返回 shared_ptr<ViewController>没有updateGallery() 方法。

我真的很讨厌做dynamic_cast(在这种情况下甚至是静态的) 维护噩梦。代码很丑!

这就是std::static_pointer_caststd::dynamic_pointer_cast的用途。您不必在铸造之前使用.get()来获取原始指针。

void GalleryViewController::startUpdate(bool shouldStart)
{
    if (shouldStart == false) {
    updateFunction = [self = std::static_pointer_cast<GalleryViewController>(shared_from_this())](float delta)
    {
        return self->updateGallery(delta);
    };
    scheduler->schedule(updateFunction); // takes lambda by value
}

相关内容

  • 没有找到相关文章

最新更新