È possibile fornire una conversione automatica per una classe template istanziata con tipi di puntatori const e non-const?Conversione automatica dei tipi per modelli con tipi di puntatori const/non-const
In particolare, considerare quanto segue:
template <typename T>
class A {
public:
operator A<const T>()
{
return A<const T>();
}
};
int main()
{
A<const int> a1;
A<int> a2;
// Works fine; invokes operator A<const T>()
a1 = a2;
A<const int*> a3;
A<int*> a4;
// Fails to compile: no viable overloaded '='
a3 = a4;
return 0;
}
E 'possibile fornire una conversione esplicita per i tipi con argomenti template puntatore? Come apparirebbe nella definizione di A?
Come una domanda bonus/background, perché funziona sopra per gli argomenti del modello non puntatore, ma non per gli argomenti del modello di puntatore?
Per 2), poiché 'const T' con' T' essendo 'int *' è 'int * const', non' const int * ' –
Quindi, che dire' const T' e 'T const *' vuoi convertire 'T' e' T * 'implicitamente in essi esattamente? Vorresti, ad esempio, un 'A>' per convertire implicitamente in un 'A >'? O se 'U' deriva da' T', vuoi 'A ' per convertire implicitamente in 'A '? –
Yakk