私はそうのようなテンプレートクラスを作ることができれば私は思っていた:にはテンプレートクラスに制限を設ける方法がありますか?
template <class T> void DoSomething(T something);
が、私は例えばフロートまたはint型を取るために、それを制限したいです。これはできますか?
私はそうのようなテンプレートクラスを作ることができれば私は思っていた:にはテンプレートクラスに制限を設ける方法がありますか?
template <class T> void DoSomething(T something);
が、私は例えばフロートまたはint型を取るために、それを制限したいです。これはできますか?
1つのオプションは、を使用することです。これは、Tが表すタイプに応じてテンプレート関数を除外するために使用できます。例えば、
template <class T>
typename boost::enable_if<boost::is_arithmetic<T>, void>::type DoSomething(T t);
は整数型と浮動小数点型にテンプレート機能を制限するだろう。
はい、テンプレートの特殊化を見てください。ここでhttp://www.parashift.com/c++-faq-lite/templates.html#faq-35.7
特殊化によって入力の種類が制限されることはありません。それは入力に基づいて専門化されます。 – Joel
はい、浮動小数点型や整数型、または任意の型の特殊化を提供することができます。また、何もしないデフォルトの実装をしたくない型に対しては、私はいくつかの意味を作っていると思いますか? – DotNetUser
このメソッドでは、非算術型の実行時に例外をスローすることができます。 rkjnsnが彼の答えに示唆するように、これをコンパイル時にチェックする方が良いでしょう。 –
また、サポートされているすべてのタイプの関数をオーバーロードすることもできます。これにより、(boost|std)::enable_if
を使用するよりも多くのコードが生成されます。
また、C++ 11を使用している場合、基本的に同じ 'std :: enable_if'があります。 –
だから、あなたは何のためにするだろうchar配列ですか? – Pittfall
@AlexKorban私の理解では、 'std :: enable_if'は実際には' boost :: enable_if_c'と同じように機能するので、 'std :: enable_if :: value、void>'が必要です。 –
rkjnsn