virtualité méthode template de classe
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:
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