Ho il seguente modello non-type:sovraccarico operatore di assegnazione copia per uno struct membro di un non-modello di tipo struct
template<size_t MAX_SIZE>
struct Path{
struct Point{
float x;
float y;
}
};
Point segment[MAX_SIZE];
};
Se ora dichiaro due percorsi differenti, non può assegnare elementi dei diversi segmenti gli uni agli altri, come le struct possono avere la stessa struttura, ma sono di diverso tipo:
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)
Certo, se mi separo la definizione di sito e la via, la cessione avrebbe funzionato:
struct Point{
float x;
float y;
};
template<size_t MAX_SIZE>
struct Path{
Point segment[MAX_SIZE];
};
Ma non è quello che voglio (questo è solo un MWE), quindi mi chiedevo come sovraccaricare l'operatore di assegnazione delle copie per farlo funzionare. Ho provato numerose varianti, ad esempio:
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];
};
ma ottengo sempre lo stesso errore. Quindi la mia domanda è: è possibile sovraccaricare = in un modo che consenta l'assegnazione del seguente modulo senza modificare il layout delle mie strutture?
path_b.segment[0] = path_a.segment[0];
solo per assicurarsi che non si è X-Y'ing questo, si può elaborare il motivo per cui * * Punto di ogni percorso deve essere un tipo distinto, ma ancora assegnabile tra loro? –
@ MarkB, questa è una domanda irrilevante. La domanda è valida per conto proprio. Assegnare strutture interne a diversi modelli esterni è una cosa valida per conto proprio. – SergeyA
@ MarkB: La ragione principale è che sono un po 'testardo e volevo davvero sapere se c'è un modo per farlo funzionare. Inoltre, una soluzione alternativa potrebbe essere possibile per il semplice esempio presentato qui, ma non nel caso generale, poiché, ad esempio, potrebbe richiedere più modifiche in una base di codice esistente. – magnetometer