Bonjour,

Je dois actuellement chercher à faire quelque chose qui me semble trivial mais qui ne doit pas coller avec les principes du c++ et de l'objet en général.

Je souhaiterais que des méthodes statiques d'une classe parent puissent accéder à des membres statiques redéfinis des classes enfants.
Soit le code suivant:
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
 
class base {
	public: static const int CONST1 = 10;
 
	static int test(void){
		return CONST1;
	}
};
 
class ext : public base {
	public: static const int CONST1 = 123;
};
 
int main (int argc, char* argv[]){
   std::cout << base::test() << std::endl;
   std::cout << ext::test() << std::endl;
}
J'obtiens actuellement l'output suivant:
10
10
Alors que je souhaiterais obtenir
10
123
La différence se faisant sur l'appelant de la méthode test() statique.

En PHP il existe les Late Static Bindings (LSB) qui permettent de résoudre différemment la portée suivant que l'on veuille s'adresser à la classe qui déclare la méthode ou celle qui l’appelle. Cela reste bien sur quelque chose de border line vu que les classes parent ne doivent normalement pas maitriser le contenu déclaré dans les classes enfant. Ici je ne fais que des redéfinitions.

Je travaille sous VS2012 CTP de novembre 2012 et affectionne beaucoup C++11.

Merci par avance pour vos lumière et bon week end.