C ++ std :: function语法问题

问题描述 投票:1回答:1

我试图存储一个函数指针,以便稍后回调,如下所示:

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(..)的参数对于其他用户来说太复杂。我该怎么做呢?

c++ function-pointers
1个回答
2
投票

以下是一些基于您目前发布的详细信息的示例代码:

#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之后不能调用周期性任务。

© www.soinside.com 2019 - 2024. All rights reserved.