小编Dou*_*ijn的帖子

如何创建返回与函数具有相同签名的仿函数的函数?

在c ++中是否可以创建返回与函数具有相同签名的仿函数的函数?

基本上,如何合法化decltype(foo) foo();.

或者与仿函数:function<function<function<...(void)>(void)>(void)>

我想将它用于状态机,其中每个状态都是一个函数,它将一个仿函数返回到对象的下一个状态.我现在使用枚举实现它,但我觉得必须有更好的方法:

#include <iostream>
using namespace std;

enum functionenum{END,FOO,BAR,BAZ};

functionenum foo(){
    cout<<"FOO! > ";
    string s;
    cin>>s;
    if(s=="end") return END;
    if(s=="bar") return BAR;
                 return FOO;
}

functionenum bar(){
    cout<<"BAR! > ";
    string s;
    cin>>s;
    if(s=="end") return END;
    if(s=="baz") return BAZ;
                 return BAR;
}

functionenum baz(){
    cout<<"BAZ! > ";
    string s;
    cin>>s;
    if(s=="end") return END;
    if(s=="bar") return BAR;
    if(s=="foo") return FOO;
                 return BAZ;
}

void state(){
    auto f=foo;
    while(true){
        switch (f()){
        case FOO: f=foo; …
Run Code Online (Sandbox Code Playgroud)

c++ recursion state-machine functor c++11

7
推荐指数
1
解决办法
551
查看次数

标签 统计

c++ ×1

c++11 ×1

functor ×1

recursion ×1

state-machine ×1