2012-03-01 18 views

答えて

6

1つのオプションは、を使用することです。これは、Tが表すタイプに応じてテンプレート関数を除外するために使用できます。例えば、

template <class T> 
typename boost::enable_if<boost::is_arithmetic<T>, void>::type DoSomething(T t); 

は整数型と浮動小数点型にテンプレート機能を制限するだろう。

+0

また、C++ 11を使用している場合、基本的に同じ 'std :: enable_if'があります。 –

+0

だから、あなたは何のためにするだろうchar配列ですか? – Pittfall

+0

@AlexKorban私の理解では、 'std :: enable_if'は実際には' boost :: enable_if_c'と同じように機能するので、 'std :: enable_if :: value、void>'が必要です。 – rkjnsn

1

はい、テンプレートの特殊化を見てください。ここでhttp://www.parashift.com/c++-faq-lite/templates.html#faq-35.7

+0

特殊化によって入力の種類が制限されることはありません。それは入力に基づいて専門化されます。 – Joel

+0

はい、浮動小数点型や整数型、または任意の型の特殊化を提供することができます。また、何もしないデフォルトの実装をしたくない型に対しては、私はいくつかの意味を作っていると思いますか? – DotNetUser

+1

このメソッドでは、非算術型の実行時に例外をスローすることができます。 rkjnsnが彼の答えに示唆するように、これをコンパイル時にチェックする方が良いでしょう。 –

0

また、サポートされているすべてのタイプの関数をオーバーロードすることもできます。これにより、(boost|std)::enable_ifを使用するよりも多くのコードが生成されます。

関連する問題