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

c++模板元编程六:integral_constant 类

时间:2015-04-06 18:45:19      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:c++   metaprogramming   c++11   boost   

1 integral_constant类

这个类是所有traits类的基类,分别提供了以下功能:

  • value_type 表示值的类型
  • value表示值
  • type 表示自己, 因此可以用::type::value来获取值
  • true_type和false_type两个特化类用来表示bool值类型的traits,很多traits类都需要继承它们

下面的代码分别来自C++11和Boost,略有差别:

  • C++11包含value_type()函数,返回真正的value
  • C++11用constexpr关键字表示在编译期执行
// from c++11 standard
namespace std {
  template <class T, T v>
  struct integral_constant {
    static constexpr T value = v;
    typedef T value_type;
    typedef integral_constant<T,v> type;
    constexpr operator value_type() { return value; }
  };
  typedef integral_constant<bool, true> true_type;
  typedef integral_constant<bool, false> false_type;
}

// from boost
template <class T, T val>
struct integral_constant
{
   typedef integral_constant<T, val>  type;
   typedef T                          value_type;
   static const T value = val;
};

typedef integral_constant<bool, true>  true_type;
typedef integral_constant<bool, false> false_type;

下面是调用代码,看看基本使用方法:

#include <iostream>
#include <type_traits>

using std::cout;
using std::endl;

int main() {
  typedef std::integral_constant<int, 1> one_t;

  cout << "one_t::value: " << one_t::value << endl;
  cout << "one_t::type::value: " << one_t::type::value << endl;
}

输出结果是:

one_t::value: 1
one_t::type::value: 1

c++模板元编程六:integral_constant 类

标签:c++   metaprogramming   c++11   boost   

原文地址:http://blog.csdn.net/csfreebird/article/details/44904121

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