fork(3) download
  1. #include <iostream>
  2.  
  3. template<typename T, typename className, typename... _Args>
  4. struct RuntimeClass
  5. {
  6. T (className::*m_pfnFunction)(_Args... __args);
  7. };
  8.  
  9. #define DECL_RUNTIMECLASS(T, className, ...) \
  10.   static RuntimeClass<T, className, __VA_ARGS__> class_##className;
  11.  
  12. #define IMPL_RUNTIMECLASS(T, className, pfnFunc, ...) \
  13. RuntimeClass<T, className, __VA_ARGS__> className::class_##className = { (pfnFunc) };
  14.  
  15. class TestClass
  16. {
  17. public:
  18. int TestFunc(int v);
  19. DECL_RUNTIMECLASS(int, TestClass, int)
  20. };
  21.  
  22. int TestClass::TestFunc(int v)
  23. {
  24. return v;
  25. }
  26.  
  27. IMPL_RUNTIMECLASS(int, TestClass, &TestClass::TestFunc, int)
  28.  
  29. int main()
  30. {
  31.  
  32. TestClass b;
  33. std::cout<<(b.*b.class_TestClass.m_pfnFunction)(42)<<std::endl;
  34. }
Success #stdin #stdout 0s 3096KB
stdin
Standard input is empty
stdout
42