テンプレートパラメータがintやunsignedintなどの特定の基本データ型であるかどうかを判断する方法はありますか?std :: is_base_ofはそれをしません、それを試みました。すべての基本的なデータ型をボックス化できるコレクションを作成したいのですが、それがどの型であるかを判断する方法が見つかりません...
質問する
169 次
4 に答える
3
is_same を使用します。実装 (std または boost) がない場合は、これを使用します。
template < typename T1, typename T2 >
struct is_same { enum { value = false }; };
template < typename T >
struct is_same <T,T> { enum { value = true }; };
于 2013-01-17T00:25:06.683 に答える
2
いくつかの便利なもの:
より狭い定義が必要な場合は、いくつかのstd::is_same
特性を一緒にORすることができます。
template<typename T>
struct is_int_or_char_or_float {
static const bool value =
std::is_same<T, int>::value ||
std::is_same<T, char>::value ||
std::is_same<T, float>::value;
};
于 2013-01-17T00:17:08.957 に答える
1
特定のタイプかどうかを知りたい場合は、次を使用できますstd::is_same
。
#include <type_traits>
bool isInt = std::is_same<int, T>::value;
一体型かどうか知りたい場合は、std::is_integral
bool isInt = std::is_integral<T>::value;
于 2013-01-17T00:15:06.967 に答える
0
このコードを使用できます:
#include <typeinfo>
#include <iostream>
class someClass { };
int main(int argc, char* argv[]) {
int a;
someClass b;
std::cout<<"a is of type: "<<typeid(a).name()<<std::endl; // Output 'a is of type int'
std::cout<<"b is of type: "<<typeid(b).name()<<std::endl; // Output 'b is of type someClass'
return 0;
}
于 2013-01-17T00:16:19.633 に答える