在 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 特性来简化它吗?我知道我可以使用可变参数模板来使它不仅适用于成对的类型,而且我可以编写许多特化来使其适用于新的 int_leastX_t 和 int_fastX_t 类型,而不是使用 pick_first。但我很好奇是否有一个更好的方法来解决这个问题。也许以某种方式利用 auto/constexpr/decltype?