C++ std::function 语法问题
C++ std::function syntax issues
我正在尝试存储一个函数指针,以便稍后像这样回调:
Task->Sync->SetPeriodicTask( &TaskAssigner::ReadAndRelay );
TaskAssigner class 声明 void ReadAndRelay()
它包含一个 SyncManager* 同步对象。
(这可能很奇怪,但是子对象Sync需要每隔一段时间回调它的父对象class'函数)。
我这样尝试:
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(..) 的参数对于其他用户来说太复杂而无法编写。
我该如何处理?
下面是一些基于您目前发布的详细信息的示例代码:
#include <functional>
using func = std::function<void()>;
struct S
{
func CB_func_periodic;
void SetPeriodicTask( func f ) { CB_func_periodic = f; }
};
struct R
{
void ReadAndRelay() {}
S s;
};
int main()
{
R r;
r.s.SetPeriodicTask( [&] { r.ReadAndRelay(); } );
}
SetPeriodicTask
的参数应该是 Callable,因为该函数会调用它。成员函数地址不可调用
代码应该结构化,以便在 r
销毁后无法调用周期性任务。
我正在尝试存储一个函数指针,以便稍后像这样回调:
Task->Sync->SetPeriodicTask( &TaskAssigner::ReadAndRelay );
TaskAssigner class 声明 void ReadAndRelay() 它包含一个 SyncManager* 同步对象。
(这可能很奇怪,但是子对象Sync需要每隔一段时间回调它的父对象class'函数)。
我这样尝试:
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(..) 的参数对于其他用户来说太复杂而无法编写。 我该如何处理?
下面是一些基于您目前发布的详细信息的示例代码:
#include <functional>
using func = std::function<void()>;
struct S
{
func CB_func_periodic;
void SetPeriodicTask( func f ) { CB_func_periodic = f; }
};
struct R
{
void ReadAndRelay() {}
S s;
};
int main()
{
R r;
r.s.SetPeriodicTask( [&] { r.ReadAndRelay(); } );
}
SetPeriodicTask
的参数应该是 Callable,因为该函数会调用它。成员函数地址不可调用
代码应该结构化,以便在 r
销毁后无法调用周期性任务。