c++におけるtemplateによる文字列の処理方法

1275 ワード

C++のTemplateは、タイプが異なるが機能が似ている関数のみを統合する役割を果たしますが、templateの関数がすべてのタイプ呼び出しを満たすことができない場合があります.次のようになります.

template 
inline int hash_wrap(const Kty& k)
{
return (int)k;
}


すべての数値タイプはこのテンプレートを使用しても問題ありませんが、stringからintへのタイプ変換(コンパイル中)がサポートされていないため、stringタイプはできません.これにより、stringタイプのサポートをテンプレートの外に追加する必要があります.コードは次のとおりです.

template <>
inline int hash_wrap(conststring & k)
{
return k.size();
}


ここでtemplate<>は、この関数がテンプレートタイプの延長であることを示し、元のテンプレートのstringタイプを書き換えることを示す.
たとえば、次の2つの例を示します.
例1:

template 
inline unsigned int get_size(const Kty&k)
{
return sizeof(Kty);
}
template <>
inline unsigned int get_size(conststring& k)
{
return k.length() + 1;
}


例2:

template 
inline bool cmp_key(const Kty& k, constchar* dest)
{
return k == *(Kty* )dest;;
}
template <>
inline bool cmp_key(const string& k,const char* dest)
{
return strcmp(k.c_str(), dest) == 0;
}