Tengo una clase similar a un vector que contiene una matriz de objetos de tipo "T"
, y quiero implementar 4 operadores aritméticos, que aplicarán la operación en cada elemento:C++: Usando operador de dos tipos intrínsecos como objeto de función
// 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];
};
Debido a que los operadores contendrán el mismo código repetitivo (bucle sobre cada elemento y la aplicación de la operación apropiada), pensé que podía generalizar:
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];
};
Ahora, el problema es, ¿cómo puedo pasar un operador que toma dos intrincaciones ic tipos y devuelve void
a do_for_each
, como se muestra en el ejemplo anterior? C++ no me deja hacer este truco para tipos intrínsecos ("T::operator+="
no funcionará si "T"
es "int"
).
Es posible que desee fijar '' 'de los artículos data' vs ... – Alastair
gracias, fijo a continuación también –
Preguntas como esta son las razones por las que los amigos no dejan que los amigos sobrecarguen a los operadores – Jonathan