コンパイル時にC++ 11では、2つのテンプレートパラメータを取るテンプレート関数で、どちらも符号なし整数型でなければなりません。ローカル変数に2つのテンプレートパラメータのいずれかの型を持たせたいビット。私はこれをより簡単にするために、新しいC++ 11個の機能のいずれかを利用することができますC++ 11大きな整数型を選択するためのテンプレートを書くには?
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++ 03で私のような何かを書くかもしれませんか私はvariadicテンプレートを使用して複数の型のペア以上で動作させることができ、pick_firstを使用する代わりに、新しいint_leastX_t型とint_fastX_t型で動作させるために多くの特殊化を書くことができました。しかし、これに平易なアプローチがあるのであれば私は不思議です。おそらく何とかauto/constexpr/decltypeを活用していますか?
あなたは 'std :: common_type'と考えましたか? –
std :: common_typeについて聞いたことがありませんでした!とても興味深い。これは私のために働くだろう。私はあなたに投票できるので、回答として投稿する必要があります) –
@DavidRodríguez-dribeasしかし、 'common_type'は整数昇格の規則のために常に動作するとは限りません。たとえば、 'std :: common_type :: type'は' int'です。これは、2つの型のどちらよりも大きい場合があります。 –
Praetorian