4

クラス テンプレートのセットと 2 つの特殊変数を実装する必要が_1あり_2ます。

彼らは、次の法規を制定する必要があります。

// Sort ascending
std::sort(a, a+5, _1 > _2);

// Output to a stream
std::for_each(a, a+5, std::cout << _1 << " ");

// Assign 100 to each element
std::for_each(a, a+5, _1 = 100);

// Print elements increased by five 5
std::transform(a, a+5, std::ostream_iterator<int>(std::cout, " "), _1 + 5);

_1 * 5 も _1 / 5 などと同様に単項関数を生成する必要があると思います。

  • ブースト不可
  • ラムダは許可されていません

現在、私はテンプレートとテンプレート メタプログラミングの経験がほとんどないため、どこから始めればよいか、クラス テンプレートの構造がどのように見えるべきかさえわかりません。operator=クラステンプレート内operator>>でこれらすべての実装を個別に記述する必要があるかどうか、またはより一般的な方法があるoperator+かどうかがわからないため、特に混乱しています。...-...*.../

これらの演算子の実装例を示した回答に特に感謝します。テンプレートはまだ私にはとても混乱しているように思えます。

4

2 に答える 2

2

簡単な例:

template <typename T>
class Parameter
{
};

template <typename T>
struct Ascending
{
    bool operator()(T left, T right)
    {
        return left < right;
    }
};

template <typename T>
Ascending<T> operator > (Parameter<T> p1, Parameter<T> p2)
{
    return Ascending<T>();
}

int main()
{

    std::vector<int> vec;
    vec.push_back(3);
    vec.push_back(6);
    vec.push_back(7);
    vec.push_back(2);
    vec.push_back(7);

    std::vector<int>::iterator a = vec.begin();

    Parameter<int> _1;
    Parameter<int> _2;

    std::sort(a, a+4, _1 > _2);
}
于 2011-12-09T16:07:58.310 に答える