0

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

我之前用过M4宏生成语言。它以牺牲可读性和可用性为代价提供了出色的性能。

这次我不想走那条路,正在考虑使用 C++11 Variadic 模板。

有更好的选择吗?

4

1 回答 1

1

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

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

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

`vector<GenericParameter*> params`

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

完成此操作后,您可以使用可变参数模板来验证参数向量是否与已编译的函数匹配,并将运行时向量绑定到函数的静态已知签名,并自动生成接受泛型向量并将参数拆箱为本机类型。另一个方向也是如此。

需要查看的东西称为 protobuf,它在 Google 中大量用于此类事情,我听说过关于它的好消息。

于 2013-05-12T06:53:17.643 回答