Podczas kompilacji w C++ 11 w funkcji szablonu, która pobiera 2 parametry szablonu, z których oba muszą być typu liczb całkowitych bez znaku, chciałbym mieć zmienną lokalną mieć typ, który z dwóch parametrów szablonu ma więcej bity. W C++ 03 mógłbym napisać coś takiego:C++ 11 sposób na napisanie szablonu do wybrania większej liczby całkowitej?
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
}
mogę wykorzystać dowolny z nowych funkcji C++ 11, aby to prostsze? Wiem, że mogłem używać szablonów variadic, aby działały z więcej niż parami typów i zamiast używać pick_first, mogłem napisać wiele specjalizacji, aby działały z nowymi typami int_leastX_t i int_fastX_t. Ale jestem ciekawy, czy istnieje po prostu lepsze podejście do tego. Może w jakiś sposób wykorzystując auto/constexpr/decltype?
Czy brałeś pod uwagę 'std :: typ_typowy' –
Nie słyszałem o std :: typ_typowy! Bardzo interesujące. To byłoby dla mnie. Powinieneś jednak opublikować odpowiedź, aby móc Cię głosować;) –
@ DavidRodríguez-dribeas Ale 'typ_typowy' nie zawsze będzie działał ze względu na zasady dotyczące całkowitej liczby promocji. Na przykład 'std :: common_type :: type' to' int', który może być większy niż jeden z dwóch typów. –
Praetorian