C++基于输入参数的动态代码生成
C++ dynamic code generation based on input parameter
我有以下函数:
void scan(DataRow& input) {
if(input.isRaw()) {
...
}
if(input.isExternal()) {
...
}
if(input.hasMultipleFields()) {
...
for(auto& field: input.fields()) {
if(field.size() == 2) {
...
}
}
}
}
DataRow
类有许多子类,上面的所有is
函数都是虚拟的。
此函数用于扫描多个大型数据行组。对于每个组,所有数据行实例都将具有相同的属性(例如,所有原始,所有外部(。
因此,我不是在scan
函数中使用所有这些 if/else 逻辑,而是在考虑是否有办法生成临时代码。例如,现在我已经知道我的下一组都是原始的(或全部不是(,那么我可以摆脱第一个 if 分支。
在Java中,我曾经通过为类生成字节代码并在JVM中动态加载生成的类来做这种事情。我知道同样的技巧对C++不起作用,但我几乎没有经验如何做到这一点。谁能给出一些提示?谢谢!
您无法在运行时轻松操作可执行代码。但是你的问题看起来不像你必须沿着那条路走下去。
您有具有相似属性的行组,并且每个组都有特殊的处理逻辑。此外,似乎有少量固定数量的不同类型的组。
您拥有在编译时拆分代码的所有必要信息 - 实际上是"编程时间"。将scan()
函数拆分为一种组的一个函数,并相应地调用scan_raw()
、scan_external()
等。
这会将if
条件检查的次数从每行一次减少到每组一次。作为额外的好处,单独的扫描函数可以使用适当的派生类作为其参数类型,您可以摆脱整个isSomething()
机器。
嗯,在这一点上,我很想指出你std::variant
和std::visit
(或他们的 Boost 等价物(。不过,这可能是一个更大的重构。因为在使用它们时,理想情况下,您会将它们用作当前基于继承的多态性方法的完全替代品。
相关文章:
- C++基于输入参数的动态代码生成
- 我可以动态创建新地图并作为函数参数传递吗?
- 无法将动态创建的对象数组从 qml 发送到 c++ 作为方法参数
- 如果您为类的一个对象动态分配内存作为参数,会发生什么
- 将数组动态分配到具有指针参数的函数中
- 如何动态加载和调用具有特定于库的类型作为函数参数的符号
- 传递给函数的模板化参数的动态大小数组
- 如何在 C++11 中创建具有命令行参数大小的动态数组?
- 如何使用每个对象的单个构造函数参数动态分配C++对象数组?
- 动态构建模板参数包
- 在为 Java 编译动态链接文件时,我应该选择哪些 g++ 参数
- 动态创建和扩展STD ::元组为参数包
- 如何在不动态铸造的情况下使用派生的参数
- 如何动态执行具有任意参数类型的函数指针
- 在C 中解开包装的类似Python的动态参数
- 将动态创建的数组作为参数传递
- 如何使用一些参数初始化动态分配的数组中的对象
- 为 C 绑定创建动态以 null 结尾的参数
- C++ CPP 使用参数动态调用 DLL
- 用CPP中的参数动态调用外部DLL