2009-05-08 9 views
0

operator%の両方を使用する関数テンプレートGCDを作成しているとします。例えば、複素数または多項式のようないくつかのタイプでは、両方を効率的に計算することができます(つまり、多項式を分割すると、余分に「自由」になります)。そのため、私のクラステンプレートの中にはdivmodが実装されており、商と剰余のペアが返されます。C++テンプレートにメソッドが指定されているかどうかを調べる方法

ただし、一部のクラス、特にintなどの組み込み型の中にはdivmod(または同等のもの)が実装されていないものがあります。 GCDdivmodと書いていたら、他のタイプと区別することになります(またその逆もあります)。私はGCDのコードの大部分を繰り返す必要のないテンプレートの専門化を考え出すことができませんでした。

ここには何がありますか?

答えて

3

私はそれに基づいて型特質とテンプレート特殊化に行きます。メタプログラミングを使用して、タイプにdivmodがあるかどうかを判断し、それに基づいて一般的なアルゴリズムの特定の部分を提供することができます。つまり、アルゴリズムの共通部分を、一般的なコードに抽出します。コードの一般的な部分は、タイプテストに基づいて異なる部分の特殊な機能を呼び出します。

タイプ特性の実装方法についてはboost::type_traits library、(ポリシー)テンプレートを使用して共通のコードベースに異なる動作を注入する方法についてはpolicy based designを参照してください。

+0

ありがとう、私はあなたの答えを推測し、http://www.ddj.com/cpp/184404270#l4私が行くだろう! – user103892

+0

ok、実際にはhttp://www.kuro5hin.org/?op=displaystory&sid=2001/3/1/72020/17594トリックを行いました – user103892

関連する問題