Bonjour
Je suis curieux de savoir s'il existe un compilateur (basé sur une norme c++ récente ex C++11) qui accepterait un polymorphisme sur une méthode template de classe. Voici un exemple:
A l'écran, on verrait afficher "B:3" et "A:2"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 #include<iostream> struct A { virtual template<int n> int f(){ return n; } }; struct B: public A { virtual template<int n> int f(){ return n+1; } }; struct C: public A { virtual template<int n> int f(){ return n+2; } }; int main() { A *a = new A; A *b = new B; std::cout <<"B:"<< b->f<2>() <<endl; std::cout <<"A:"<< a->f<2>() <<endl; };
Il faudrait que l'analyse de la "templetude de F" de A entraine la génération de code de toutes les fonctions f de toutes ses classes filles pour le même argument.
Ainsi on pourrait imaginer que
- dés le compilateur voit "A *", il se prépare à générer le code des f pour les classes A , B et C.
- puis dés qu'il voit ->f<2>, il exécute la génération de f<2> pour les 3 classes même s'il n'existe aucune instance de C.
Merci
Partager