Ich habe eine vektorartige Klasse, die ein Array von Objekten vom Typ "T"
enthält, und ich möchte 4 arithmetische Operatoren implementieren, die die Operation auf jedes Element anwenden:C++: Operator zweier intrinsischer Typen als Funktionsobjekt verwenden
// 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];
};
Da die Betreiber den gleichen Standardcode (Schleifen über jedes Element und die Anwendung geeigneten Betriebes) enthalten, dachte ich, dass ich es verallgemeinern könnte:
isttemplate<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];
};
nun das Problem, wie gehe ich ein Operator, der zwei intrins nimmt ic-Typen und liefert void
zu do_for_each
, wie im obigen Beispiel dargestellt? C++ lässt mich diesen Trick nicht für intrinsische Typen machen ("T::operator+="
funktioniert nicht, wenn "int"
ist).
Sie könnten 'data' vs' Elemente '... – Alastair
dank beheben wollen, fest es auch unter –
Fragen wie diese sind, warum Freunde Freunde nicht überladen Betreiber – Jonathan