gpt4 book ai didi

c++ - 具有默认参数的模板特化

转载 作者:太空狗 更新时间:2023-10-29 20:20:25 24 4
gpt4 key购买 nike

<分区>

我有一个程序如下。有一个基础模板 struct X以及 SFINAE 的部分专业。

template <typename T, typename U = void>
struct X{
X() {
std::cout << "in 1" << std::endl;
};
};

template <typename T>
struct X< T, std::enable_if_t<std::is_integral_v<T>> > {
X() {
std::cout << "in 2" << std::endl;
};
};

int main() {
X<int> x;
}

运行程序时in 2被打印出来。

  1. 为什么选择第二个专业而不是第一个,因为它们都有效地声明了一个 struct X<int, void> .是什么造就了std::enable_if_t<std::is_integral_v<T>>比基本模板中显示的默认模板类型参数更专业?

  2. 为什么基本模板的默认类型参数必须与偏特化定义的类型相同才能调用偏特化并且in 2被打印。为什么更改为 std::enable_if_t<std::is_integral_v<T>, bool>导致基础模板 in 1被调用?

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