gpt4 book ai didi

c++ - 语法错误 : Call Member Function Pointer using Pointer to Object

转载 作者:行者123 更新时间:2023-11-30 05:33:55 24 4
gpt4 key购买 nike

我有一个棘手的语法错误,我无法弄清楚。我正在尝试运行一个函数委托(delegate),其中上下文是指向对象的指针。

语法错误:

((object)->*(ptrToMember)) // the compiler doesn't like the ->*

Where object is of the type Component*

And ptrToMember is of the type void (Component::*EventCallback) ()

下面是语法错误的代码:

typedef void (Component::*EventCallback) ();

...

std::weak_ptr<Component> wc( mySharedPtr );
EventCallback ec = &Component::run;

((wc.lock())->*(ec))(); // syntax error
(wc.lock()->(*ec))(); // simpler version but still syntax error

// This is ok, but is there any significant time or memory involved in this reference object creation?
Component& wcc = *wc.lock();
(wcc.*ec)();

最佳答案

wc.lock()返回 std::shared_ptr<Component>但你期望它返回原始 Component*指针代替。你不能调用 ->*std::shared_ptr 上本身。你必须向它询问 Component*它持有的指针,然后你可以使用 ->*该指针上的运算符,例如:

(wc.lock().get()->*ec)();

由于您正在处理 std::weak_ptr ,它可能会在您使用之前过期,您应该确保 Component在您尝试访问对象之前,对象在锁定后实际上是可用的:

if (auto sptr = wc.lock()) {
(sptr.get()->*ec)();
}
else {
// wc had expired
}

关于c++ - 语法错误 : Call Member Function Pointer using Pointer to Object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34522700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com