1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #include <functional> #include <iostream> #include <string> #include <map> class api { //maps containing the different function pointers typedef void(*voidfuncptr)(); typedef int(*stringcrintptr)(std::string, const int&); std::map<std::string, voidfuncptr> voida; std::map<std::string, stringcrintptr> stringcrint; public: //api temp class //given an api and a name, it converts to a function pointer //depending on parameters used class apitemp { const std::string n; const api* p; public: apitemp(const std::string& name, const api* parent) : n(name), p(parent) {} operator voidfuncptr() {return p->voida.find(n)->second;} operator stringcrintptr() {return p->stringcrint.find(n)->second;} }; //insertion of new functions into appropriate maps void insert(const std::string& name, voidfuncptr ptr) {voida[name]=ptr;} void insert(const std::string& name, stringcrintptr ptr) {stringcrint[name]=ptr;} //operator[] for the name gets halfway to the right function apitemp operator[](std::string n) const {return apitemp(n, this);} } myMap; int hello_world(std::string name, const int & number ) { name += "!"; std::cout << "Hello, " << name << std::endl; return number; } int main() { myMap.insert("my_method_hello", &hello_world ); int a = myMap["my_method_hello"]("Tim", 25); } |
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPG1hcD4KCmNsYXNzIGFwaSB7CiAgICAvL21hcHMgY29udGFpbmluZyB0aGUgZGlmZmVyZW50IGZ1bmN0aW9uIHBvaW50ZXJzCiAgICB0eXBlZGVmIHZvaWQoKnZvaWRmdW5jcHRyKSgpOwogICAgdHlwZWRlZiBpbnQoKnN0cmluZ2NyaW50cHRyKShzdGQ6OnN0cmluZywgY29uc3QgaW50Jik7CgogICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHZvaWRmdW5jcHRyPiB2b2lkYTsKICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdHJpbmdjcmludHB0cj4gc3RyaW5nY3JpbnQ7CnB1YmxpYzoKICAgIC8vYXBpIHRlbXAgY2xhc3MgCiAgICAvL2dpdmVuIGFuIGFwaSBhbmQgYSBuYW1lLCBpdCBjb252ZXJ0cyB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgIAogICAgLy9kZXBlbmRpbmcgb24gcGFyYW1ldGVycyB1c2VkCiAgICBjbGFzcyBhcGl0ZW1wIHsKICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBuOwogICAgICAgIGNvbnN0IGFwaSogcDsKICAgIHB1YmxpYzoKICAgICAgICBhcGl0ZW1wKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjb25zdCBhcGkqIHBhcmVudCkgCiAgICAgICAgICAgIDogbihuYW1lKSwgcChwYXJlbnQpIHt9CiAgICAgICAgb3BlcmF0b3Igdm9pZGZ1bmNwdHIoKSAKICAgICAgICB7cmV0dXJuIHAtPnZvaWRhLmZpbmQobiktPnNlY29uZDt9CiAgICAgICAgb3BlcmF0b3Igc3RyaW5nY3JpbnRwdHIoKSAKICAgICAgICB7cmV0dXJuIHAtPnN0cmluZ2NyaW50LmZpbmQobiktPnNlY29uZDt9CiAgICB9OyAKICAgIC8vaW5zZXJ0aW9uIG9mIG5ldyBmdW5jdGlvbnMgaW50byBhcHByb3ByaWF0ZSBtYXBzCiAgICB2b2lkIGluc2VydChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgdm9pZGZ1bmNwdHIgcHRyKSAKICAgIHt2b2lkYVtuYW1lXT1wdHI7fQogICAgdm9pZCBpbnNlcnQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIHN0cmluZ2NyaW50cHRyIHB0cikKICAgIHtzdHJpbmdjcmludFtuYW1lXT1wdHI7fQogICAgLy9vcGVyYXRvcltdIGZvciB0aGUgbmFtZSBnZXRzIGhhbGZ3YXkgdG8gdGhlIHJpZ2h0IGZ1bmN0aW9uCiAgICBhcGl0ZW1wIG9wZXJhdG9yW10oc3RkOjpzdHJpbmcgbikgY29uc3Qge3JldHVybiBhcGl0ZW1wKG4sIHRoaXMpO30KfSBteU1hcDsKCmludCBoZWxsb193b3JsZChzdGQ6OnN0cmluZyBuYW1lLCBjb25zdCBpbnQgJiBudW1iZXIgKQp7CiAgICBuYW1lICs9ICIhIjsKICAgIHN0ZDo6Y291dCA8PCAiSGVsbG8sICIgPDwgbmFtZSA8PCBzdGQ6OmVuZGw7CiAgICByZXR1cm4gbnVtYmVyOwp9CgppbnQgbWFpbigpIHsKICAgIG15TWFwLmluc2VydCgibXlfbWV0aG9kX2hlbGxvIiwgJmhlbGxvX3dvcmxkICk7IAogICAgaW50IGEgPSBteU1hcFsibXlfbWV0aG9kX2hlbGxvIl0oIlRpbSIsIDI1KTsKfQ==
prog.cpp: In function ‘int main()’: prog.cpp:46: warning: unused variable ‘a’
-
upload with new input
-
result: Success time: 0s memory: 2860 kB returned value: 0
Hello, Tim!


