gpt4 book ai didi

c++ - 为什么type_traits是用structs实现的

转载 作者:行者123 更新时间:2023-11-30 03:13:43 25 4
gpt4 key购买 nike

大多数类型特征都是使用结构和模板部分(或完全)特化制作的。例如 std::is_same 被实现为

template<typename>
struct is_same : false_type {};
template<typename T>
struct is_same<T, T> : true_type {}; // partial specialization

用法是

bool are_equal = std::is_same<T, U>::value;

.. = std::is_same_v<T, U>;

这两个都有点难看。起初我认为这是唯一的解决方案,然后我发现变量也可以部分特化(而函数不能)。类型转换特征不能(显然)是变量,但对于“信息”特征,为什么这不会比结构更好?

template<typename>
inline constexpr bool is_same = false;
template<typename T>
inline constexpr bool is_same<T, T> = true;

然后

bool are_equal = std::is_same<T, U>;

最佳答案

原因仅仅是历史原因。大多数类型特征都是在 C++11 中首先添加到库中的。稍后在 C++14 中添加了变量模板,更改实现的那一点是不可行的,因为那太向后不兼容了。因此添加了带有 _v 后缀的变量,这成为了惯例。

以相同的方式添加新特征,因为在任何库中保持一致性都很重要,更不用说标准库了。

关于c++ - 为什么type_traits是用structs实现的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58475786/

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