`void_t` 是如何工作的 [英] How does `void_t` work

查看:24
本文介绍了`void_t` 是如何工作的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 Cppcon14 上观看了 Walter Brown 关于现代模板编程的演讲(第一部分第二部分),在那里他展示了他的 void_t SFINAE 技术.

I watched Walter Brown's talk at Cppcon14 about modern template programming (Part I, Part II) where he presented his void_t SFINAE technique.

示例:
给定一个简单的变量模板,如果所有模板参数都格式正确,则计算结果为 void:

template< class ... > using void_t = void;

以及以下特征,用于检查名为 member 的成员变量是否存在:

and the following trait that checks for the existence of a member variable called member:

template< class , class = void >
struct has_member : std::false_type
{ };

// specialized as has_member< T , void > or discarded (sfinae)
template< class T >
struct has_member< T , void_t< decltype( T::member ) > > : std::true_type
{ };

我试图了解这是为什么以及如何工作.因此,一个小例子:

I tried to understand why and how this works. Therefore a tiny example:

class A {
public:
    int member;
};

class B {
};

static_assert( has_member< A >::value , "A" );
static_assert( has_member< B >::value , "B" );

1. has_member<>

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆