gpt4 book ai didi

c++ - 元编程和运行时代码生成

转载 作者:行者123 更新时间:2023-11-28 07:37:24 28 4
gpt4 key购买 nike

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

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

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

有更好的选择吗?

最佳答案

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

您的问题本质上是类型的运行时序列化和反序列化。 C++ 没有任何“内置”标准方法来执行此操作。

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

`vector<GenericParameter*> params`

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

在你有了这个之后,你可以使用 varadic 模板来验证参数 vector 是否匹配编译的函数,并将运行时 vector 绑定(bind)到函数的静态已知签名,以及自动生成适配器它采用通用 vector 并将参数拆箱为 native 类型。反之亦然。

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

关于c++ - 元编程和运行时代码生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16502744/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com