C++14: Variable templates
Variable templates は定数を任意の型で定義する事ができるようになる機能です。
以前の書き方では πなどの定数を任意の型で使用できるようにする場合、
template<typename T> struct PI{ static const T value; }; template<typename T> const T PI<T>::value = T(3.1415926535897932385); float f = PI<float>::value; double d = PI<double>::value;
と、いうような書き方をする必要がありました。
Variable templates はこういう『定数を任意の型で定義したい』場合に利用する事が出来ます。
template<typename T> constexpr T PI = T{3.1415926535897932385}; float f = PI<float>; // float 型 double d = PI<double>; // double 型 template<typename T> T evens = T{0, 2, 4, 6, 8, 10}; std::vector<int> vec = evens<std::vector<int>>; std::list<int> list = evens<std::list<int>>;
実装コンパイラ
- Clang 3.4
- GCC 5.0