所以,我有一个想要发布的模板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。