gpt4 book ai didi

c++ - enable_if 结构定义和默认模板参数

转载 作者:搜寻专家 更新时间:2023-10-31 01:51:57 26 4
gpt4 key购买 nike

根据enable_if结构的定义:

template<bool B, class T = void>
struct enable_if {};

template<class T>
struct enable_if<true, T> { typedef T type; };

我在想怎么办

template<class T>
T foo(T t, typename std::enable_if<std::is_integral<T>::value >::type* = 0)
{
return t;
}

特别是:

typename std::enable_if<std::is_integral<T>::value >::type

可以在没有指定类型 T 的情况下被调用,以防 std::is_integral<T>::value等于 true .在这种情况下,将调用 std::enable_if 的特化,并且在此定义中没有默认模板参数。

是不是模板参数机制的推导?如果是,为什么要为非特化定义指定一个默认参数?

最佳答案

你的问题有点含糊,但据我了解:

I am wondering how ... could be invoked without specified type T

  1. 不会; fooenable_if模板将仅在用户需要实例化(隐式或显式)时实例化,具有 T 的特定值。所以T始终指定。

  2. 默认模板参数仅在“基本”模板定义中有特色(即。不是特化)。这就是为什么你只在 enable_if 的第一个声明中看到它的原因.但是,它们会影响所有特化(基本上,如果您实例化 enable_if<X>,编译器会发现您没有为基本模板提供参数之一,并尝试将所有特化与参数列表 <X, void> 匹配)。

顺便说一句,第二个模板参数用于从 enable_if 中获取不同的类型比void :

std:enable_if<1, int>::type f();

将只是 int f() .

关于c++ - enable_if 结构定义和默认模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13361553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com