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 | // http://stackoverflow.com/questions/9054703/overloaded-function-as-argument-of-variadic-template-function/9058164#9058164 #include<iostream> using namespace std; int sumall(int a) { return a; } int sumall(int a, int b) { return a+b; } string sumall(string a, string b) { return a+" "+b; } template<typename ...Args> struct OverloadResolved { template<typename R> static auto static_doit( R (*f) (Args...), Args ... args ) -> R { return f(args...); } }; template<typename ...Args> auto deduce(Args...) -> OverloadResolved<Args...> { return OverloadResolved<Args...>(); } #define doit(f, ...) ( dummy<decltype(deduce( __VA_ARGS__ ))> :: static_doit(f, __VA_ARGS__) ) template<typename T> struct dummy : public T { }; int main() { cout << doit(sumall, 7, 6) << endl; cout << doit(sumall, 10) << endl; cout << doit(sumall, string("hi"), string("world")) << endl; } |
Ly8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy85MDU0NzAzL292ZXJsb2FkZWQtZnVuY3Rpb24tYXMtYXJndW1lbnQtb2YtdmFyaWFkaWMtdGVtcGxhdGUtZnVuY3Rpb24vOTA1ODE2NCM5MDU4MTY0CgojaW5jbHVkZTxpb3N0cmVhbT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBzdW1hbGwoaW50IGEpIHsgcmV0dXJuIGE7IH0KaW50IHN1bWFsbChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGErYjsgfQpzdHJpbmcgc3VtYWxsKHN0cmluZyBhLCBzdHJpbmcgYikgeyByZXR1cm4gYSsiICIrYjsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgLi4uQXJncz4Kc3RydWN0IE92ZXJsb2FkUmVzb2x2ZWQgewogICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFI+CiAgICAgICAgc3RhdGljIGF1dG8gc3RhdGljX2RvaXQoIFIgKCpmKSAoQXJncy4uLiksIEFyZ3MgLi4uIGFyZ3MgKSAtPiBSIHsKICAgICAgICAgICAgICAgIHJldHVybiBmKGFyZ3MuLi4pOwogICAgICAgIH0KfTsKCnRlbXBsYXRlPHR5cGVuYW1lIC4uLkFyZ3M+CmF1dG8gZGVkdWNlKEFyZ3MuLi4pIC0+IE92ZXJsb2FkUmVzb2x2ZWQ8QXJncy4uLj4gewogICAgICAgIHJldHVybiBPdmVybG9hZFJlc29sdmVkPEFyZ3MuLi4+KCk7Cn0KCiNkZWZpbmUgZG9pdChmLCAuLi4pICggZHVtbXk8ZGVjbHR5cGUoZGVkdWNlKCBfX1ZBX0FSR1NfXyApKT4gOjogc3RhdGljX2RvaXQoZiwgX19WQV9BUkdTX18pICkKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnN0cnVjdCBkdW1teSA6IHB1YmxpYyBUIHsgfTsKCmludCBtYWluKCkgewogICBjb3V0IDw8IGRvaXQoc3VtYWxsLCA3LCA2KSA8PCBlbmRsOwogICBjb3V0IDw8IGRvaXQoc3VtYWxsLCAxMCkgPDwgZW5kbDsKICAgY291dCA8PCBkb2l0KHN1bWFsbCwgc3RyaW5nKCJoaSIpLCBzdHJpbmcoIndvcmxkIikpIDw8IGVuZGw7Cn0K
-
upload with new input
-
result: Success time: 0s memory: 2964 kB returned value: 0
13 10 hi world


