我有一个需要在运行时生成函数参数的要求。
在编译时,我不知道参数的数量或类型。必须在运行时从文件中读取它,生成代码并动态加载。
我以前使用过M4宏生成语言。它牺牲了可读性和可用性而提供了出色的性能。
这次我不想走那条路,并且正在考虑使用C ++ 11 Variadic模板。
有更好的选择吗?
最佳答案
Varadic模板不起作用,因为您需要在编译时知道所有可能的参数类型列表,然后为每个实例实例化一个模板。
您的问题本质上是类型的运行时序列化和反序列化。 C ++没有任何“内置”标准方法来执行此操作。
您将需要创建一些GenericParameter
类型,然后具有:
`vector<GenericParameter*> params`
或类似。然后为每个要编码的类型创建一个GenericParameter的派生类以将其装箱。序列化一组参数时,需要为每个派生类创建并存储某种类型的ID,然后序列化该类的数据。同样,在相反的方向上,您将读取类型id,构造该类型id的适当派生类,然后使用该类的数据填充它。
完成此操作后,您也许可以使用可变参数模板来验证参数向量与已编译的函数匹配,并将运行时向量绑定到函数的静态已知签名,并自动生成采用以下形式的适配器:通用向量,然后将参数拆箱成本机类型。同样在另一个方向。
要看的东西叫做protobuf,它在Google中被广泛用于此类事情,而且我听说过有关它的好东西。
关于c++ - 元编程和运行时代码生成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16502744/