fork download
  1. #include <iostream>
  2. #include <utility>
  3.  
  4. void foo() {
  5. std::cout << "void foo()\n";
  6. }
  7.  
  8. int bar(int u, char* c_str) {
  9. std::cout << "int bar(" << u << ", \"" << c_str << "\")\n";
  10. return u;
  11. }
  12.  
  13. template<typename T>
  14. class WrapFuncObj;
  15.  
  16. template<typename T, typename... Args>
  17. class WrapFuncObj<T(Args...)> {
  18. T (*f)(Args...);
  19. public:
  20. WrapFuncObj(T (*t)(Args...)) {
  21. f = t;
  22. }
  23.  
  24. T operator()(Args&&... args) {
  25. if(f != nullptr) {
  26. return (*f)(std::forward<Args>(args)...);
  27. } else {
  28. return T();
  29. }
  30. }
  31. };
  32.  
  33. int main() {
  34. WrapFuncObj<void()> wrap_foo(&foo);
  35. wrap_foo();
  36.  
  37. WrapFuncObj<int(int, char*)> wrap_bar(&bar);
  38. wrap_bar(0, "test");
  39.  
  40. WrapFuncObj<void()> wrap_null(nullptr);
  41. wrap_null(); // prints nothing.
  42. }
Success #stdin #stdout 0s 3412KB
stdin
Standard input is empty
stdout
void foo()
int bar(0, "test")