#include <iostream>

template<typename T, typename className, typename... _Args>
struct RuntimeClass
{
   T (className::*m_pfnFunction)(_Args... __args);
};

#define DECL_RUNTIMECLASS(T, className, ...) \
   static RuntimeClass<T, className, __VA_ARGS__> class_##className;

#define IMPL_RUNTIMECLASS(T, className, pfnFunc, ...) \
RuntimeClass<T, className, __VA_ARGS__> className::class_##className = { (pfnFunc) };

class TestClass
{
public:
   int TestFunc(int v);
   DECL_RUNTIMECLASS(int, TestClass, int)
};

int TestClass::TestFunc(int v)
{
   return v;
}

IMPL_RUNTIMECLASS(int, TestClass, &TestClass::TestFunc, int)

int main()
{

   TestClass b;
   std::cout<<(b.*b.class_TestClass.m_pfnFunction)(42)<<std::endl;
}