ce soir, juste un petit article pour vous montrer une utilisation des template qui en surprendrait plus d'un. c'est suite à un sujet de JoelF que je me suis dit que ça vous servirait: sachez que ça existe, et si un jour vous êtes perdus, que le compilo gueule des parse error alors que tout semble correct, pensez-y.
il s'agit de la notation « .template » (et « ->template »). cette notation (la synthaxe tout de suite) doit être uniquement utilisée à l'intérieur de template et seulement s'ils utilisent quelque chose dépendant d'un paramètre template, ce pour éviter la confusion synthaxique entre l'argument template et l'opérateur de comparaison <
l'exemple tout de suite: voyez par vous même comment faire les différents appels.
Code :
- template<typename T>
- struct Foo
- {
- template<typename U>
- static void staticFunction()
- {}
- template<typename U>
- void Function()
- {}
- };
- struct Bar
- {
- template<typename U>
- static void staticFunction()
- {}
- template<typename U>
- void Function()
- {}
- };
- template<typename U>
- void fx(U u)
- {
- u.template Function<void>();
- (&u)->template Function<void>();
- U::template staticFunction<void>();
- }
- int main()
- {
- Foo<int>::staticFunction<bool>();
- Bar::staticFunction<double>();
- Foo<unsigned> f;
- Bar b;
- f.Function<void>();
- (&f)->Function<void>();
- b.Function<char>();
- (&b)->Function<char>();
- fx(f);
- fx(b);
- }
|
Message édité par Taz le 05-09-2003 à 21:11:10