c++ - 将成员函数作为参数传递给多个级别的类
问题描述
我有 3 个不同的类,该类 - 消费者正在被用户使用。我基本上希望用户提供在工作人员出错时必须执行的方法。所以我必须以某种方式将它传递给工人阶级
消费者类实例化一个订阅者类,而订阅者类又实例化一个工作者类。我在消费者类中有一个方法-onerrorReceived。我想将此函数作为参数传递给 subscribe.create 方法,该方法将调用 subscribe 的构造函数并将函数传递给 worker 的构造函数。如果出现任何错误,worker 方法将在内部调用此方法。
我阅读了有关 lambda、std::func、std::bind 的信息,并尝试实现它,但我无法实现。
消费类:
auto consumer = std::make_shared<RdConsumer>(topics.size());
auto Subscriber = Subscriber::create(conf, consumer, [&consumer](){ consumer->onerrorReceived(); });
在 subcriber.h 中,
Subscriber(const Configuration& conf, IRecordConsumerPtr consumer, std::function<void(std::exception_ptr)>);
static std::shared_ptr<Subscriber> create(const Configuration& conf, IRecordConsumerPtr consumer, std::function<void(std::exception_ptr)> f);
在订阅者.C
std::shared_ptr<Subscriber> Subscriber::create(const Configuration& conf,
IRecordConsumerPtr consumer,
std::function<void(std::exception_ptr)> f)
{
auto subscriberPtr = std::shared_ptr<Subscriber>(new Subscriber(conf, consumer, std::bind(&f)));
return subscriberPtr;
}
Subscriber::Subscriber(const Configuration& conf, IRecordConsumerPtr consumer, std::function<void(std::exception_ptr)> f)
: myLogger(cpplogger::get_instance("class.cp.Subscriber")), myConsumer(consumer),
myWorker(std::make_shared<Worker>("Common Worker"), std::bind(&f))
{}
在 Worker.h 中
explicit Worker(std::string name, std::function<void(std::exception_ptr)> f);
std::function<void(std::exception_ptr)> callback;
工人.C
Worker::Worker(std::string name, std::function<void(std::exception_ptr)> f) : myName(std::move(name)), callback(f)
{}
...
void Worker::run()
{
try {
...
} catch (const std::exception& e) {
std::exception_ptr eptr = std::current_exception();
callback(eptr);
}
}
有人可以指出我在这里缺少什么。我是 C++ 新手。所以请给我一些有价值的资源,我可以学习修复这个问题。
解决方案
推荐阅读
- javascript - 媒体记录器跨浏览器以 WAV 格式保存
- javascript - 使用 Google Apps 脚本更新 Trello Card
- python - 缺少 1 个函数所需的位置参数
- html - 根据窗口大小更改图像的 CSS(响应式设计)
- android - 在 VIew 中如何使用 ViewModel 和 ViewModelProvider
- reactjs - 尝试导入错误:“alpha”未从“@material-ui/core/styles”导出
- amazon-web-services - 在 AWS eks 集群上安装 Tiller 无法正常工作(权限问题)
- sql - 从具有特殊编号的同一行输出两行
- java - Hadoop 和 Python MapReduce - 子进程失败,代码为 127
- google-drive-api - 使用pytorch从colab保存到谷歌驱动器会产生黑色图像