14

特定の型の基本型を返す型特性テンプレートはありますか。基本型とは、すべての値修飾子、const、volatile などを取り除いた型を意味します。たとえば、仮説的な特性関数を使用すると、次のようになります。

base<int>::type == int
base<int const>::type == int
base<int&>::type == int

私はそれらを組み合わせて使用​​していることを認識してremove_constおり、現在も使用しています。remove_referenceしかし、そのような特性がすでに存在するかどうか、そしておそらく私が言及しているものに適切な名前があるかどうか疑問に思っていますか?

4

3 に答える 3

20

おそらく、次のような型エイリアスを定義します。

template<typename T>
using base_type = typename std::remove_cv<typename std::remove_reference<T>::type>::type;

ここで、 R. Martinho FernandesUnqualifiedがそのような型エイリアスの名前を提案していることに注意してください。

一方、標準の型特性は、上記std::decay同じことを行い、配列および関数型に対してさらに何かを行います。これは、必要な場合とそうでない場合があります。

于 2013-05-25T12:35:26.780 に答える
9

試してみてくださいstd::decay。関数に引数を値で渡すときに何が起こるかを模倣します。トップレベルの cv 修飾子、参照を削除し、配列をポインターに変換し、関数を関数ポインターに変換します。

よろしく、&rzej

于 2013-05-25T12:38:48.647 に答える
3

明らかに、タイプから正確に何を削除したいかによって異なります。std::decayは、探しているものである可能性があります (参照を削除し、const/volatile配列をポインターに、関数を関数ポインターに減衰させます)。配列をポインターに、関数を関数ポインターに減衰させたくない場合は、 and に固執する必要がありますstd::remove_reference( and をstd::remove_cv削除constvolatileます)。もちろん、この 2 つを独自の typetrait に組み合わせて、使いやすくすることもできます。

于 2013-05-25T12:35:03.640 に答える