首页 > 解决方案 > 自动化各种类型的重复代码?

问题描述

有什么方法可以让我自动化

DeserializeComponent<IDComponent>(json, e);
DeserializeComponent<NameComponent>(json, e);
DeserializeComponent<PointLightComponent>(json, e);
// ...

std::vector正如您在此处看到的,对不同类型执行相同的代码,但在 C++ 中,就我所知,您不能将类型存储在 a中。有什么方法可以让我自动化吗?就像循环在应用程序启动时添加到向量中的组件一样?另外,我想避免 RTTI。

标签: c++templatestemplate-meta-programming

解决方案


您可以将类型存储在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{});
}


推荐阅读