c – “:: value”在哪里获得价值?
我一直在阅读有关SFINAE的内容,并查看以下某些变体的一些示例:
#include <iostream> #include <type_traits> template <typename... Ts> using void_t = void; template <typename T,typename = void> struct has_typedef_foobar : std::false_type {}; template <typename T> struct has_typedef_foobar<T,void_t<typename T::foobar>> : std::true_type {}; struct foo { using foobar = float; }; int main() { std::cout << std::boolalpha; std::cout << has_typedef_foobar<int>::value << std::endl; std::cout << has_typedef_foobar<foo>::value << std::endl; } (摘自https://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error) 我对价值成员的来源感到困惑. has_typedef_foobar的两个定义似乎都没有指定名为value的布尔成员. :: value在哪里获得它的价值?我怀疑它是某种编译器提供的值,并且想要阅读它,但我不确定谷歌的术语,因为我的查询带来了其他与C 11相关的其他与价值相关的主题. 谢谢. 解决方法
std :: true_type和std :: false_type定义为:
using true_type = std::integral_constant<bool,true> using false_type = std::integral_constant<bool,false> 分别.也就是说,它们是std :: integral_constant的两个独立实例. 现在,如果你看一下std :: integeral_constant的可能实现: template<class T,T v> struct integral_constant { ... static constexpr T value = v; ... }; 除此之外,您还会看到名为value的静态constexpr变量.当然,如果你将std :: integeral_constant实例化为std :: integral_constant< bool,true>然后将instatiatation中的value成员变量设置为true.以同样的方式,如果你将std :: integral_constant实例化为std :: integral_constant< bool,false>然后它的value成员变量设置为false. 继承自std :: true_type,您还继承了设置为true且继承自std :: false_type类型的值成员变量,您还继承了设置为false的值成员变量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |