У меня есть векторный класс, который содержит массив объектов типа "T"
, и я хочу реализовать 4 арифметических оператора, которые будут применять операцию для каждого элемента:C++: использование оператора двух внутренних типов как объекта функции
// Constructors and other functions are omitted for brevity.
template<class T, unsigned int D>
class Vector {
public:
// Add a value to each item: naive implementation.
void operator += (const T&) {
for (int i = 0; i < D; ++i) {
data[i] += value;
}
}
void operator -= (const T&) { ... }
void operator *= (const T&) { ... }
void operator /= (const T&) { ... }
private:
T items[D];
};
Поскольку операторы будут содержать один и тот же шаблонный код (цикл по каждому элементу и применяя соответствующую операцию), я думал, что я мог бы обобщать:
template<class T, unsigned int D>
class Vector {
public:
void operator += (const T& value) { do_for_each(???, value); }
void operator -= (const T& value) { do_for_each(???, value); }
void operator *= (const T& value) { do_for_each(???, value); }
void operator /= (const T& value) { do_for_each(???, value); }
private:
void
do_for_each(std::binary_function<void, T, T>& op, T value) {
std::for_each(data, data + D, std::bind2nd(op, value));
}
T data[D];
};
Теперь проблема в том, как я прохожу оператор, который принимает два внутренних ic типы и возвращает void
до do_for_each
, как показано в примере выше? C++ не позволяет мне делать этот трюк для встроенных типов ("T::operator+="
не будет работать, если "T"
- "int"
).
Вы можете исправить `data` против` `деталей ... – Alastair 2008-11-16 03:44:23
спасибо, фиксированная он тоже ниже – 2008-11-16 03:48:34