タイプ抽出
2640 ワード
C++ではtypeidでタイプ名を取得できます(組み込みタイプもカスタムタイプも可能です)が、この方法で取得した名前を変数の宣言にすることはできません.では、C++ではどのようにしてオブジェクトのタイプを認識しますか??組み込みタイプとカスタムタイプをタイプ抽出で区別できます.
たとえば、組み込みタイプはmemcopyとmemmoveの2つの方法でコピーできます.カスタムタイプまたはstringは、値を割り当てる方法でコピーします.これで効率がアップします.
タイプ抽出の方式:タイプ抽出はテンプレートに基づいて内蔵タイプとその他のタイプを区別し、主な原理は内蔵タイプをすべて特化してから区別する.
たとえば、組み込みタイプはmemcopyとmemmoveの2つの方法でコピーできます.カスタムタイプまたはstringは、値を割り当てる方法でコピーします.これで効率がアップします.
タイプ抽出の方式:タイプ抽出はテンプレートに基づいて内蔵タイプとその他のタイプを区別し、主な原理は内蔵タイプをすべて特化してから区別する.
struct TrueType
{
bool Get()
{
return true;
}
};
struct FalseType
{
bool Get()
{
return false;
}
};
template
struct TypeTraits
{
typedef FalseType IsPODType; // , IsPODType FalseType
};
//
template<>
struct TypeTraits
{
typedef TrueType IsPODType; // IsPODType TrueType
};
template<>
struct TypeTraits
{
typedef TrueType IsPODType; // IsPODType TrueType
};
template<>
struct TypeTraits
{
typedef TrueType IsPODType; // IsPODType TrueType
};
template<>
struct TypeTraits
{
typedef TrueType IsPODType; // IsPODType TrueType
};
template<>
struct TypeTraits
{
typedef TrueType IsPODType; // IsPODType TrueType
};
template<>
struct TypeTraits
{
typedef TrueType IsPODType; // IsPODType TrueType
};
template<>
struct TypeTraits
{
typedef TrueType IsPODType; // IsPODType TrueType
};
template<>
struct TypeTraits
{
typedef TrueType IsPODType; // IsPODType TrueType
};
template<>
struct TypeTraits
{
typedef TrueType IsPODType; // IsPODType TrueType
};
template<>
struct TypeTraits
{
typedef TrueType IsPODType; // IsPODType TrueType
};
template<>
struct TypeTraits
{
typedef TrueType IsPODType; // IsPODType TrueType
};
template<>
struct TypeTraits
{
typedef TrueType IsPODType; // IsPODType TrueType
};
template<>
struct TypeTraits
{
typedef TrueType IsPODType; // IsPODType TrueType
};
template
void Copy(T* dest,T* src,int sz)
{
if (TypeTraits::IsPODType().Get() == 1)//
{
memmove(dest, src, sz*sizeof(T)); // string , string
}
else //
{
for (int i = 0; i