相关疑难解决方法(0)

void_t"可以实现概念"吗?

我正在观看Walter Brown的CppCon2014关于模板元编程的第二部分,在此期间他讨论了他的新颖void_t<>结构的用法.在他的演讲中,Peter Sommerlad问他一个我不太明白的问题.(链接直接转到问题,正在讨论的代码直接发生在那之前)

索默拉德问道

沃尔特,这是否意味着我们现在实际上可以实现概念精简版?

沃尔特回应了什么

哦耶!我已经完成了......它没有完全相同的语法.

我理解这个交换是关于Concepts Lite的.这种模式真的那么多才多艺吗?无论出于何种原因,我都没有看到它.有人可以解释(或描绘)这样的事情会是什么样子?这是关于enable_if和定义特征,还是提问者指的是什么?

void_t模板定义如下:

template<class ...> using void_t = void;
Run Code Online (Sandbox Code Playgroud)

然后他使用它来检测类型语句是否格式正确,使用它来实现is_copy_assignable类型特征:

//helper type
template<class T>
using copy_assignment_t
= decltype(declval<T&>() = declval<T const&>());

//base case template
template<class T, class=void>
struct is_copy_assignable : std::false_type {};

//SFINAE version only for types where copy_assignment_t<T> is well-formed.
template<class T>
struct is_copy_assignable<T, void_t<copy_assignment_t<T>>> 
: std::is_same<copy_assignment_t<T>,T&> {};
Run Code Online (Sandbox Code Playgroud)

由于这个话题,我理解这个例子是如何工作的,但是我没有看到我们如何从这里得到像Concepts Lite这样的东西.

c++ templates template-meta-programming c++11 c++-concepts

68
推荐指数
1
解决办法
7055
查看次数