c++ - 自动化各种类型的重复代码?
问题描述
有什么方法可以让我自动化
DeserializeComponent<IDComponent>(json, e);
DeserializeComponent<NameComponent>(json, e);
DeserializeComponent<PointLightComponent>(json, e);
// ...
std::vector
正如您在此处看到的,对不同类型执行相同的代码,但在 C++ 中,就我所知,您不能将类型存储在 a中。有什么方法可以让我自动化吗?就像循环在应用程序启动时添加到向量中的组件一样?另外,我想避免 RTTI。
解决方案
您可以将类型存储在std::tuple<tag<Ts>...>
或TypeList<Ts...>
然后使用可变参数模板。
template <typename T> struct Tag{ using type = T; };
using MyTypes = std::tuple<Tag<IDComponent>, Tag<NameComponent>/*, ...*/>;
// And then do something like
void foo()
{
// ...
apply([&](auto tag){ DeserializeComponent<typename decltype(tag)::type>(json, e) },
MyTypes{});
}
推荐阅读
- android - android google play billing library v2.0.3 acknowledgePurchase failed with error code 5 in Android Q (api 29)
- android - 通过 Kotlin 中的类共享功能
- mysql - curdate() 的时间?
- c++ - 确定整个测地线球体的纹理坐标
- python - 朴素贝叶斯 partial_fit() 对单个样本使用超过 16 GB 的 RAM
- python - 查找属于列表的元素的概率
- android - 找不到 com.android.tools.build:gradle:3.4.2
- c# - 将 DataTable 内容导出到 CSV 文件
- html - 无法使用 lxml 刮表
- linux - 在构建“alsa-sys”板条箱作为依赖项时,如何安装和连接 alsa.pc?