Lors de la préparation à un examen de la POO, j'ai apprécié voir g ++ compiler le code suivant (sans instanciation), même si elle semblait avoir aucun sens:En C++, comment créer une conversion de T à T *?
template<class T> void f() {
T t = "a";
t += 5.6;
t->b();
T* p = t;
p = p*(t/"string");
}
Je me suis alors mis sur un défi de faire ce instancier et compiler.
J'ai créé la classe suivante:
class A {
public:
A(const char* s) {}
void operator+=(double d) {}
A operator/(char* str) {return A("");}
A* operator->() {return this;}
A* operator=(A& a) {return &a;}
void b() {}
};
A* operator*(A* a, A b) {return new A("");}
qui a permis la quasi-totalité du modèle de travailler, à l'exception de la ligne
T* p = t;
Ma question est, quel opérateur ou constructeur fera ce travail en ligne ? À l'heure actuelle, il me donne « erreur: ne peut pas convertir « A » à « A * » dans l'initialisation »
Une raison particulière pour faire cette chose horrible, ou est-ce juste pour voir si vous le pouvez? –
Ceci est de préparer un examen, et comme un exercice. Je promets de ne jamais écrire de code qui ressemble à ceci dans quelque chose de réel :) – Tzafrir
Ugh. Vous pourriez vouloir passer un examen qui vous demande d'écrire un tel code. – sbi