Something in C++...

Works Not works
#include <iostream> #include <string> static struct Works { template<typename T> void operator() (const char* msg, const T& data) { std::cout << msg << ": " << data << "\n"; } } Works; template<typename DataType, typename FuncType> void Stupid(const char* msg, const DataType& data, FuncType func) { func(msg, data); } int main(void) { int Int = 5; std::string Str = "viisi"; Stupid("Works", Int, Works); Stupid("Works", Str, Works); } #include <iostream> #include <string> void NotWorks(const char* msg, int data) { std::cout << msg << ": " << data << "\n"; } void NotWorks(const char* msg, const std::string& data) { std::cout << msg << ": " << data << "\n"; } template<typename DataType, typename FuncType> void Stupid(const char* msg, const DataType& data, FuncType func) { func(msg, data); } int main(void) { int Int = 5; std::string Str = "viisi"; Stupid("NotWorks", Int, NotWorks); Stupid("NotWorks", Str, NotWorks); }
Works too This too
#include <iostream> #include <string> static struct Works { void operator() (const char* msg, int data) { std::cout << msg << ": " << data << "\n"; } void operator() (const char* msg, const std::string& data) { std::cout << msg << ": " << data << "\n"; } } Works; template<typename DataType, typename FuncType> void Stupid(const char* msg, const DataType& data, FuncType func) { func(msg, data); } int main(void) { int Int = 5; std::string Str = "viisi"; Stupid("Works", Int, Works); Stupid("Works", Str, Works); } #include <iostream> #include <string> template<typename T> void Works(const char* msg, const T& data) { std::cout << msg << ": " << data << "\n"; } template<typename DataType, typename FuncType> void Stupid(const char* msg, const DataType& data, FuncType func) { func(msg, data); } int main(void) { int Int = 5; std::string Str = "viisi"; Stupid("Works", Int, Works<int> ); Stupid("Works", Str, Works<std::string> ); }