在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)