Ich habe die folgende nicht-Typen Vorlage:Überlastung Kopie Zuweisungsoperator für ein Mitglied struct eine nicht-Typ Template-Struktur
template<size_t MAX_SIZE>
struct Path{
struct Point{
float x;
float y;
}
};
Point segment[MAX_SIZE];
};
Wenn ich jetzt zwei verschiedene Pfade erklären, kann ich nicht Elemente der verschiedenen Segmente zuzuweisen zueinander, da die Strukturen die gleiche Struktur aufweisen, sind aber von einem anderen Typ:
Path<10> path_a ;
Path<30> path_b ;
path_a.segment[0].x = 1;
path_a.segment[0].y = 2;
path_b.segment[0] = path_a.segment[0]; // <- error C2679 in Visual Studio)
natürlich, wenn ich die Definition von Point-and-Pfad trennen, würde die Zuordnung arbeiten:
struct Point{
float x;
float y;
};
template<size_t MAX_SIZE>
struct Path{
Point segment[MAX_SIZE];
};
Aber das ist nicht was ich will (das ist nur ein MWE), also habe ich mich gefragt, wie ich den Kopierzuweisungsoperator überladen kann, damit es funktioniert. Ich habe verschiedene Varianten ausprobiert, zum Beispiel:
template<size_t MAX_SIZE>
struct Path{
struct Point{
float x;
float y;
template<size_t OTHER_SIZE>
Point & operator = (const typename Path<OTHER_SIZE>::Point & that)
{
x = that.x;
y = that.y;
return *this;
}
};
Point segment[MAX_SIZE];
};
aber ich bekomme immer den gleichen Fehler. Meine Frage ist also: Ist es möglich, overload = in einer Weise, die eine Zuordnung der folgenden Form ermöglicht, ohne das Layout meiner Strukturen zu ändern?
path_b.segment[0] = path_a.segment[0];
nur sicherstellen, dass Sie nicht X-Y'ing dies sind, können Sie auf erarbeiten * warum * jeder Punkt den Weg muss ein eigener Typ sein, aber immer noch einander zuweisbar? –
@MarkB, das ist irrelvant Frage. Die Frage ist eigenständig gültig. Das Zuweisen innerer Strukturen von verschiedenen äußeren Vorlagen ist eine eigenständige Sache. – SergeyA
@MarkB: Der Hauptgrund ist, dass ich ein bisschen stur bin und wirklich wissen wollte, ob es einen Weg gibt, es zum Laufen zu bringen. Außerdem ist möglicherweise eine Problemumgehung für das hier vorgestellte einfache Beispiel möglich, aber nicht im allgemeinen Fall, da es beispielsweise mehrere Änderungen in einer vorhandenen Codebasis erfordern kann. – magnetometer