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:

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;
};
A l'écran, on verrait afficher "B:3" et "A:2"

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