如果创建支持返回可变参数类型列表的通用模板 API,我应该使用 std::tuple 还是其他东西?



所以,我有一个想要发布的模板API。 此 API 返回包含类型列表的类类型。

通常,我应该使用std::tuple<>来指定这一点,还是应该使用其他可能更轻量级的东西?

我想我听说过std::tuple<>可能会导致编译时间稍慢,相对于使用,比如:

template <typename...>
struct list {};

这是真的吗?

我想我听说std::tuple<>可能会导致编译时间稍慢

这是真的。Louis Dionne(Boost.Hana的作者)提到std::tuple一直比他hana::tuple实现慢。在"异构/make"下有一个涉及 metaben.chstd::tuple基准。


如果你只需要一个类型列表,我建议简单地使用:

template <typename... Ts>
struct type_list { };

在轻量级方面,你不能做得更好,它很容易"转换"为std::tuple<Ts...>或任何其他可变参数模板类。 此外,它的语义和含义比std::tuple更清晰,后者通常用于运行时计算。

template <typename TypeList, template <typename...> class Target>
struct rename;
template <typename... Ts, template <typename...> class Target>
struct rename<type_list<Ts...>, Target>
{
using type = Target<Ts...>;
};

如果你想要一个非常快速的纯类型元编程库,请查看Kvasir.MPL。

最新更新