有没有办法在所述方法或函数中捕获方法原型的参数名称?

时间:2019-06-08 18:50:13

标签: c++ templates reflection c++17

我想创建在编译时使用方法定义类的宏。这些方法是在另一个进程中运行的类的代理方法。宏定义了方法和相应方法的方法原型,就像它们在远程过程中一样。

(由宏生成的)方法主体的内容充当模板类和方法的包装,这些类和方法调用对序列化参数并将结果数据发送到远程进程执行所需的框架级操作。

如果我可以使用编译器或预处理器捕获参数变量并将其传递给底层框架方法,那么使用它的人将更容易使用。

我对封装参数的方式进行了大量研究。元组和参数包非常有用,我在此框架的服务器端广泛使用了它们,但似乎我现在正尝试以相反的方式使用这些概念。

例如不需要使现有的类和方法(及其实现)可用,以便可以从流程外部调用它们,而需要生成在编译时成为现有方法的包装器的方法。

例如,我想生成这样的内容(这是一种简化)。

class MyClass
{
    MyClass() { Create<MyClass>() }
    MyClass(int i) { Create<MyClass>( i ) }

    int MyMethod( int j ) { return Invoke< int (MyClass::*)( int j) >( j ); }
    int MyMethod( int j, float f ) { return Invoke <int (MyClass::*)( int j, float f)( j, f ); }
};

我已经能够处理方法/函数指针,推导参数类型等,但是在这方面,是自动从方法调用(变量名)中获取数据并将其作为参数放置到该方法包装的方法/功能,不知道是否可行。

我想到了可变参数模板参数,但是对于重载的方法(就为所述方法定义有效的参数而言),我无法做到精确。

我首先认为这是不可能的,但是我对C ++ 17还是比较陌生(从C ++ 2003跳转),所以也许有些东西可以使函数中的实际参数变量通用化? / p>

谢谢你, 凯文

0 个答案:

没有答案