c – “:: value”在哪里获得价值?

c – “:: value”在哪里获得价值?,第1张

概述我一直在阅读有关SFINAE的内容,并查看以下某些变体的一些示例: #include <iostream>#include <type_traits>template <typename... Ts> using void_t = void;template <typename T, typename = void>struct has_typedef_foobar : std::fa 我一直在阅读有关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的值成员变量.

总结

以上是内存溢出为你收集整理的c – “:: value”在哪里获得价值?全部内容,希望文章能够帮你解决c – “:: value”在哪里获得价值?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1217306.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存