码迷,mamicode.com
首页 > 编程语言 > 详细

C++ void_t

时间:2018-03-19 15:25:15      阅读:389      评论:0      收藏:0      [点我收藏+]

标签:stat   static   false   template   log   show   .com   begin   ios   

考虑如下代码:

#include <type_traits>
#include <iostream>
#include <vector>
using namespace std;

template <typename T, typename = void>
struct RangeConcept : std::false_type {};

template <typename T>
struct RangeConcept<T, 
                       std::void_t<
                                   decltype(  std::declval<T >().begin() ),
                                   decltype(  std::declval<T >().end() )
                                  >
                      >
    : std::true_type {};

template<typename Cont>
void show( Cont c){
    static_assert( RangeConcept< Cont >::value, "must be a range. means.. it has begin() and end()" );
}
int main() { std::vector<int> vec{1,2,3,4,5}; show(vec); }

这就是C++17带来的void_t神器。写个静态断言无比容易。手写个Concept检查也不再是C++库开发者的专利了。

参考:http://en.cppreference.com/w/cpp/types/void_t

C++ void_t

标签:stat   static   false   template   log   show   .com   begin   ios   

原文地址:https://www.cnblogs.com/thomas76/p/8602318.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!