C++ 模板重载解析成本
我在看这个关于优化模板编译时间的特别的CppCon讨论。在这里,他给出了下面的例子C++ 模板重载解析成本,c++,templates,C++,Templates,我在看这个关于优化模板编译时间的特别的CppCon讨论。在这里,他给出了下面的例子 template <typename Type, std::enable_if_t = is_list<Type>> struct pm { static auto read(Type& t) {....} static auto write(Type const& t) {...} }; 模板 结构pm { 静态自动读取(
template <typename Type, std::enable_if_t = is_list<Type>>
struct pm
{
static auto read(Type& t) {....}
static auto write(Type const& t) {...}
};
模板
结构pm
{
静态自动读取(类型&t){….}
静态自动写入(const&t类型){…}
};
并表示由于
启用if\u t
,这将具有线性模板重载解析时间复杂性。我不太明白在这种情况下模板重载解析是如何发生的。AFAIK编译器将首先在所有定义的模板中替换类型T
。这意味着要研究两种可能性。一个有列表,一个没有列表。之后,它有一个特定的模板实例化,它正在寻找,这应该只是O(1)查找。你能纠正我在思考过程中遗漏了什么吗?真正的代码有点不清楚,如图所示用法是pm::read(t)
,这是错误的。也许他谈到了不同的重载template std::enable_if_t read(t&)
(foris_list
,is_integral
,…)用法强制检查每个重载(并只选择正确的一个)。但我看不出标签调度如何减少这里的实例化。真正的代码是如何的,有点不清楚,如图所示用法是pm::read(t)
,这是错误的。也许他谈到了不同的重载template std::enable_if_t read(t&)
(foris_list
,is_integral
,…)用法强制检查每个重载(并只选择正确的一个)。但我看不出标签调度如何减少这里的实例化。