模板integral_constant
定义一个类型,关键字constexpr
定义一个常量.例如std::true_type
是std::integral_constant
.
其中一个用法示例是tag-dispatching
.
templatevoid use_impl(const T&, std::false_type) { } template void use_impl(const T&, std::true_type) { } template void use(const T& v) { use_impl(v, typename std::is_integral ::type()); }
实例
它可以与三元运算符一起使用,例如
void gotoN_impl(std::integral_constant<int,0>::type) { std::cout << "GoTo 0" << '\n'; } void gotoN_impl(std::integral_constant<int,1>::type) { std::cout << "GoTo 1" << '\n'; } void gotoN_impl(std::integral_constant<int,2>::type) { std::cout << "GoTo 2" << '\n'; } void gotoN_impl(std::integral_constant<int,3>::type) { std::cout << "GoTo 3" << '\n'; } template<int N> void gotoN() { gotoN_impl(typename std::integral_constant<int, N>::type()); } int main() { gotoN<0>(); gotoN<1>(); gotoN<2>(); gotoN<3>(); constexpr auto x = 99; gotoN<x<4?x:3>(); // with a ternary operator }
模板integral_constant
定义一个类型,关键字constexpr
定义一个常量.例如std::true_type
是std::integral_constant<bool, true>
.
其中一个用法示例是tag-dispatching
.
template<typename T> void use_impl(const T&, std::false_type) { } template<typename T> void use_impl(const T&, std::true_type) { } template<typename T> void use(const T& v) { use_impl(v, typename std::is_integral<T>::type()); }
实例