क्या सी ++ में ऐसा फ़ंक्शन बनाने के लिए संभव है जो फ़ंक्शन के समान हस्ताक्षर वाले फ़ंक्शन को लौटाता हो?फ़ंक्शन कैसे बनाएं जो फ़ंक्शन के समान हस्ताक्षर वाले फ़ंक्शन को लौटाता है?
मूल रूप से, decltype(foo) foo();
को वैध कैसे करें।
या functors के साथ: function<function<function<...(void)>(void)>(void)>
मैं जहां हर राज्य में एक समारोह है कि वस्तु के अगले राज्य के लिए एक functor देता है एक राज्य मशीन के लिए इसका उपयोग करना चाहते हैं। मैं अब enums का उपयोग कर इसे क्रियान्वित किया है, लेकिन मैं की तरह वहाँ एक बेहतर तरीका होना चाहिए लग रहा है:
#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; break;
case BAR: f=bar; break;
case BAZ: f=baz; break;
case END: return;
};
};
}
int main(){
state();
}
भी: वहाँ सवाल वाक्यांश के लिए एक कम भद्दा तरीका है?
आप वीएचडीएल के बजाय सी ++ में राज्य मशीन कोड क्यों लिख रहे हैं? –
क्योंकि मैं गणितीय अमूर्तता के बारे में बात कर रहा हूं और वास्तविक मशीन के बारे में नहीं। –
वैसे यह निर्भर करता है कि "वापसी" से आपका क्या मतलब है। फंक्शंस एक तरह से मज़ेदार व्यवहार करते हैं, इसलिए संकलक अभी भी कुछ भी लौटने से पहले मज़ेदार के मूल्य का मूल्यांकन करेगा ताकि आप रिकर्सन के साथ समाप्त हो जाएंगे। –