FC2ブログ

スポンサーサイト関数テンプレートの特殊化

Home > ----- / スポンサー広告 > This Entry 2006-08 / CからC++へ > This Entry [com : 0][Tb : 0]

--------

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2006-08-01

前回は、max関数を例に挙げて関数テンプレートの話をしましたが、今回は、そのmax関数を特殊化して、文字列に対するmax関数を作ってみることにします。

const char*型のオブジェクトが引数として渡された場合、前回取り上げたmax関数では、単にポインタの値の大小関係を比較するだけで、文字列の比較を行うことはできませんでした。ご存知のように、文字列の比較にはstrcmp関数を使う必要があるからです。

そこで、今回はmax関数テンプレートをconst char*型に対して特殊化することになるわけです。ではコードを見てみましょう。

template <>
const char* max(const char* a, const char* b)
{
  return std::strcmp(a, b) < 0 ? b : a;
}

このように、関数テンプレートを特殊化するときは、template <>を使って、それが特殊化された関数であることを表します。

ついでにワイド文字列版も定義してみましょう。

template <>
const wchar_t* max(const wchar_t* a, const wchar_t* b)
{
  return std::wcscmp(a, b) < 0 ? b : a;
}

このようにして、必要に応じて関数テンプレートはいくらでも特殊化を行うことができます。

もっとも、このような単純な関数であれば、わざわざ関数テンプレートの特殊化を行わなくても、普通の多重定義でも済ませることができます。しかし、ものによってはどうしても関数テンプレートの特殊化でなければならない場合もあります。その具体例については、また機会を改めてお話しすることにしたいと思います。

Comment

Post a Comment









管理者にだけ表示を許可

Trackback

http://cppemb.blog17.fc2.com/tb.php/96-263cc409

C++と組み込み環境 | Page Top▲

New >>
クラステンプレート
<< old
関数テンプレート
ブログ内検索
RSSフィード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。