元编程和运行时代码生成

时间:2013-05-11 23:36:44

标签: c++ unix c++11 metaprogramming m4

我有一个要求,我需要在运行时生成函数参数。 在编译时,我不知道参数的数量或类型。它必须在运行时从文件中读取,生成代码并动态加载。

之前我使用过M4宏生成语言。它在牺牲可读性和可用性方面提供了出色的性能。

这次我不想走那条路,想着使用C ++ 11 Variadic模板。

有更好的选择吗?

1 个答案:

答案 0 :(得分:1)

Varadic模板不起作用,因为您需要在编译时知道所有可能的参数类型列表,然后为每个模板实例化一个模板。

您的问题基本上是类型的运行时序列化和反序列化。 C ++没有任何“内置”标准方法来实现这一点。

您需要创建一些GenericParameter类型,然后:

`vector<GenericParameter*> params`

或类似的。然后,对于要编码的每种类型,创建一个GenericParameter的派生类来将其打包。序列化一组参数时,需要为每个派生类创建和存储某种类型的id,然后序列化该类的数据。同样,在相反的方向上,您读取类型id,构造该类型id的相应派生类,然后用该类的数据填充它。

执行此操作后,您可以使用varadic模板验证params向量是否与已编译的函数匹配,并将运行时向量绑定到函数的静态已知签名,以及自动生成适配器采用泛型向量并将参数解包为本机类型。同样在另一个方向。

要看的东西叫做protobuf,谷歌在这方面大量使用它,我听说过它很好。

相关问题