在C ++ 11中的模板函数,它2个模板参数,这两者必须是无符号整数类型编译时间,我想有一个局部变量具有取两个模板参数的具有多个位的类型。 在C ++ 03我可能会写类似:
template<bool, class T, class U>
struct pick_first;
template<class T, class U>
struct pick_first<true, T, U> {
typedef T type;
};
template<class T, class U>
struct pick_first<false, T, U> {
typedef U type;
};
template<class T, class U>
struct pick_bigger {
typedef typename pick_first<(sizeof(T) >= sizeof(U)), T, U>::type type;
};
// usage
template<class uintX_t, class uintY_t>
void foo() {
typename pick_bigger<uintX_t, uintY_t>::type mylocal = 0;
// insert doing stuff with mylocal here
}
我可以利用任何新的C ++ 11层的功能,使这个更简单? 我知道我可以使用可变参数模板,使其与不仅仅是对类型的更多工作,而不是使用pick_first我可以写很多专业化的,以使其与新int_leastX_t和int_fastX_t工种。 但我很好奇,如果有只是为了这一个普通的更好的方法。 也许在某种程度上利用自动/ constexpr / decltype?