Sto programmando una libreria (quindi ho accesso completo a tutte le classi menzionate). Due classi ( A
e B
) sono essenzialmente le stesse e differiscono solo per la loro implementazione, quindi possono essere facilmente convertite l'una nell'altra.
Ma mi sto chiedendo, se la conversione passando un argomento di tipo B
a uno dei costruttori di A
o copiando implicitamente B
in A
, è preferibile. Due esempi di codice per illustrare:
Uso della trasmissione:
class A
{
public:
int c[3];
operator B() const
{
//return B(...);
}
};
class B
{
public:
int a, b, c;
operator A() const
{
//return A(...);
}
};
Utilizzo del costruttore:
class A
{
public:
A(const B& b)
{
//...
}
int c[3];
};
class B
{
public:
B(const A& a)
{
//...
}
int a, b, c;
};
Quali sono i pro e i contro di entrambi gli approcci? Quale dovrebbe usare? E potrebbero esserci dei problemi, se qualcuno estendesse la libreria e usasse la parola chiave explicit
in alcuni dei suoi costruttori?