Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板重载解析成本_C++_Templates - Fatal编程技术网

C++ 模板重载解析成本

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 { 静态自动读取(

我在看这个关于优化模板编译时间的特别的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
{
静态自动读取(类型&t){….}
静态自动写入(const&t类型){…}
};

并表示由于
启用if\u t
,这将具有线性模板重载解析时间复杂性。我不太明白在这种情况下模板重载解析是如何发生的。AFAIK编译器将首先在所有定义的模板中替换类型
T
。这意味着要研究两种可能性。一个有列表,一个没有列表。之后,它有一个特定的模板实例化,它正在寻找,这应该只是O(1)查找。你能纠正我在思考过程中遗漏了什么吗?

真正的代码有点不清楚,如图所示用法是
pm::read(t)
,这是错误的。也许他谈到了不同的重载
template std::enable_if_t read(t&)
(for
is_list
is_integral
,…)用法强制检查每个重载(并只选择正确的一个)。但我看不出标签调度如何减少这里的实例化。真正的代码是如何的,有点不清楚,如图所示用法是
pm::read(t)
,这是错误的。也许他谈到了不同的重载
template std::enable_if_t read(t&)
(for
is_list
is_integral
,…)用法强制检查每个重载(并只选择正确的一个)。但我看不出标签调度如何减少这里的实例化。