作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
<分区>
我有一个程序如下。有一个基础模板 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
被打印出来。
为什么选择第二个专业而不是第一个,因为它们都有效地声明了一个 struct X<int, void>
.是什么造就了std::enable_if_t<std::is_integral_v<T>>
比基本模板中显示的默认模板类型参数更专业?
为什么基本模板的默认类型参数必须与偏特化定义的类型相同才能调用偏特化并且in 2
被打印。为什么更改为 std::enable_if_t<std::is_integral_v<T>, bool>
导致基础模板 in 1
被调用?
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
正如您在 this travis.yml 中看到的那样文件,我的代码依赖于一些第三方库,我在构建项目之前将它们安装在远程系统上。 Travis 每次推送提交时都会下载并构建这些库,这可以避免吗?我的意
我是一名优秀的程序员,十分优秀!