【发布时间】:2018-05-31 03:33:32
【问题描述】:
我正在尝试存储一个函数指针,以便稍后回调:
Task->Sync->SetPeriodicTask( &TaskAssigner::ReadAndRelay );
TaskAssigner 类声明 void ReadAndRelay() 它拥有一个 SyncManager* Sync 对象。
(可能有点奇怪,但是子对象Sync需要每隔一定的时间回调到其父类的函数)。
我是这样尝试的:
void SyncManager::SetPeriodicTask(std::function<void()> func) {
CB_func_periodic = func;
//CB_func_periodic = std::bind(&func, this, std::placeholders::_1);
}
成员变量声明(SyncManager.h):
private:
using func = std::function<void()>;
func CB_func_periodic;
我不确定这里的正确语法是什么,因为我遇到了很多错误。 尝试搜索错误,但我找不到适合我的情况的答案,并且我不希望 SetPeriodicTask(..) 的参数太复杂而其他用户无法编写。 我应该如何处理?
【问题讨论】:
-
SetPeriodicTask 中的代码应该是
CB_func_periodic = func;。 SetPeriodicTask 的参数应该不同 -
发布MCVE 会改善问题,因为根据您发布的内容有几个未知数
-
@M.M 我之前尝试过你的建议,但参数相同。它应该以什么方式不同..?
-
什么是
TaskAssigner::ReadAndRelay???我没有在您的代码中看到它定义。无论如何,您的TaskAssigner::ReadAndRelay很可能根本不是void ()。这就是你得到错误的原因。如果TaskAssigner声明了一个非静态的void ReadAndRelay(),那么就是void TaskAssigner::(),和void ()有很大的不同。 -
@AnT 尝试将
this的任何Sync绑定到TaskAssigner的成员指针是没有意义的
标签: c++ function-pointers