【发布时间】:2022-01-14 15:13:22
【问题描述】:
我正在尝试弄清楚如何做到这一点。 我有 2 节课 -
class Caller(){
//constructs Callee
void onEventFired(){
//need to call a function on an obj
//which I dont have access to here
//objptr->funcA
}
};
class Callee(){
//it has access to an instance of caller object
private:
void setup(){
std::unique_ptr objptr = make_unique<SampleClass>....
//create unique ptr of obj
//can pass the objptr to Caller through a
//separate function but probably not clean ??
}
};
事件链 - 调用者在自己的构造过程中创建被调用者实例,然后调用被调用者的设置函数,该函数创建 SampleClass 指针。稍后,当我想从 Caller 中调用 SampleClass 的 funcA 时,周期性事件开始触发
一种方法是通过单独的函数将原始 SampleClass 指针传递给 Caller 类,但理想情况下,我不希望 Caller 类可以访问它。 有没有办法使用一些回调,我可以干净地做到这一点。
【问题讨论】:
-
通常被调用者将实现调用者定义的接口。例如,
class Callee: public Caller::callback_client { ... };或在别处定义且对两者都可见的接口。 -
这是我上面描述的一个例子:How to implement callbacks with interface
-
现在我将使用
std::function和一个捕获被调用者实例的 lambda 表达式来创建一个简单的接口。 -
@code4fun 哦...好吧,从一开始就有这样的细节会很好... :-)
-
这不灵活,这意味着您必须在每次添加新的被调用者时更改调用者代码。通过注册,您的被调用者可以在完全不同的库中,并且仍然能够获得回调。
标签: c++ pointers callback smart-pointers unique-ptr