0

テンプレート化されたクラスを作成しようとしています。

template <<typename T>>
myclass {
  // ...
}

適切なでTインスタンス化する場合、クラスは2つの数値の最小値または最大値から選択できるようになりたいです。つまり、myclassは、場合によってはminまたはmaxでインスタンス化されます。myclass obj<T>T

std :: less / std :: more / std :: max / std::minまたは組み込みのファンクターオブジェクトのいずれかを使用してもかまいません。

ただし、コンストラクターで列挙型を使用したくないので、列挙型の値に応じて、minまたはmaxルーチンを呼び出します。コードを少しすっきりさせたいです。何か案は?これをC++で行うことは可能ですか?

4

2 に答える 2

2

これは大したことではありません。次のことを考慮してください。

template<typename T> class MyClass {
public:
    int foo(int a, int b) const {
        return T()(a, b);
    }
};

ここで、が2つの引数の最大値を返すT型の場合、最大値を返します。適用する他のバイナリアルゴリズムについても同様です。operator()

于 2012-04-15T23:48:55.953 に答える
1

[編集]私はあなたの質問の要点を完全には理解していないと思います.@DeadMGの答えは実際にあなたが探しているものです.

以下のテンプレートを使用すると、指定された T、MIN、MAX が T 間の MIN と MAX の間の数値 X を提供できるクラスをインスタンス化できます。

template<int T, int MIN, int MAX, int X = MIN + T/(MAX - MIN)>
class MyClass
{
  int foo() const
  {
    return X;
  }
};
于 2012-04-15T23:38:39.423 に答える