相关疑难解决方法(0)

递归typedef函数定义:std :: function返回自己的类型

我正在尝试实现一个状态机.状态由类型的函数表示callback_t:callback_t(int&)它返回相同类型的函数.

我不知道如何实现它,因为似乎不允许递归类型函数.

在这里我尝试(作为玩具):

#include <stdio.h>
#include <functional>

typedef std::function< callback_t(int &) > callback_t ;
callback_t f1(int & i)
{
    i++;
    return f1;
}
callback_t f0(int & i)
{
    if(i==0) i++;
    return f1;
}
callback_t start(int & i)
{
    i=0;
    return f0;
}


int main(int argc, char **argv)
{
    callback_t begin = start;
    int i=0;

    while(i<100)
        begin = begin(i);

    printf("hello world\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

错误:

C:/work/tests/tests/main.cpp:4:41: error: 'callback_t' was not declared in this scope
typedef std::function< callback_t(int …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

17
推荐指数
2
解决办法
2306
查看次数

lambda 如何捕获自身以进行异步调用?

我必须在 lambda 内部进行异步调用,一旦异步调用终止,我必须调用 lambda 本身。

我尝试用代码解释我的问题:

typedef function<void(int id)> Callback;
Run Code Online (Sandbox Code Playgroud)
AsyncWork1(Callback call, int id, string)
{
    //...
    call(id);
}

AsyncWork2(Callback call, int id, double, string)
{
    //...
    call(id);
}
Run Code Online (Sandbox Code Playgroud)
void AsyncWorks(Callback final_callback, int id)
{
    Callback lambda = [&lambda, final_callback, id](int next_work) -> void
        {
            if(next_work == 1)
            {
                //...
                AsyncWork1(lambda, 2, "bla bla");
            }
            else if(next_work == 2)
            {
                //...
                //the lambda variable no longer exists
                AsyncWork2(lambda, 3, 0.0, "bla bla");
            }
            else if(next_work == 3)
            {
                //...
                final_callback(id); …
Run Code Online (Sandbox Code Playgroud)

c++ recursion lambda asynchronous

3
推荐指数
1
解决办法
1122
查看次数

标签 统计

c++ ×2

asynchronous ×1

c++11 ×1

lambda ×1

recursion ×1