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
|
/** Le compilateur sait qu'il existe un type que l'on appelle, pour l'instant T.
* Mais il ne pourra, de toutes façons, fournir le code correspondant qu'une fois
* qu'il saura le type réel de T (*)
*
*/
template <typename T>
class C{
public:
using alias= T; //C++11 inside, totalement légal
void foo(){alias::doSomething();} //l'appel de la fonction est légal
};
class A{
public:
static void doSomething(){/* ... */}
};
void bar(){
/* arrivé à ce point, le compilateur a déjà rencontré la classe A
* et peut donc faire toutes les vérifications nécessaires
*
*/
C<A> c;// (*) c'est à dire ici. (mais erreur de compilation si A ne dispose
// pas d'une fonction statique doSomething() )
c.foo();
} |
Partager