Cela ne passe qu'avec des vieux compilos qui n'implémentent pas encore la recherche de noms en deux temps (2-phase name lookup). Afin que ça continue de passer avec des compilateurs plus à jour, il faut mettre :
int main(int argc, char* argv[]) { Derived<foo> d; Derived2<foo> f;
int i; std::cin >> i;
return 0; }
Je voudrais modifier la classe Base comme suit:
template <class BoxType> class Base { protected: std::vector<int> v; Base() { v.push_back(0); v.push_back(1); }
template <class Functor = SimpleFunctor>
Je suppose que ça aurait dû être template <class Functor = SimpleFunctor<BoxType> > mais cela ne passe pas non plus car on ne peut pas avoir d'arguments par défaut dans les templates de fonction. Il suffit de surcharger cette fonction :
La version non-template sera par exemple appelée lorsqu'on met this->Print(); à la place de this->template Print<SimpleFunctor<BoxType> >(); dans "Derived2::Derived2()".
Cela ne passe qu'avec des vieux compilos qui n'implémentent pas encore
la recherche de noms en deux temps (2-phase name lookup). Afin que ça
continue de passer avec des compilateurs plus à jour, il faut mettre :
int main(int argc, char* argv[])
{
Derived<foo> d;
Derived2<foo> f;
int i;
std::cin >> i;
return 0;
}
Je voudrais modifier la classe Base comme suit:
template <class BoxType>
class Base
{
protected:
std::vector<int> v;
Base() { v.push_back(0); v.push_back(1); }
template <class Functor = SimpleFunctor>
Je suppose que ça aurait dû être
template <class Functor = SimpleFunctor<BoxType> >
mais cela ne passe pas non plus car on ne peut pas avoir d'arguments par
défaut dans les templates de fonction. Il suffit de surcharger cette
fonction :
La version non-template sera par exemple appelée lorsqu'on met
this->Print();
à la place de
this->template Print<SimpleFunctor<BoxType> >();
dans "Derived2::Derived2()".
Cela ne passe qu'avec des vieux compilos qui n'implémentent pas encore la recherche de noms en deux temps (2-phase name lookup). Afin que ça continue de passer avec des compilateurs plus à jour, il faut mettre :
int main(int argc, char* argv[]) { Derived<foo> d; Derived2<foo> f;
int i; std::cin >> i;
return 0; }
Je voudrais modifier la classe Base comme suit:
template <class BoxType> class Base { protected: std::vector<int> v; Base() { v.push_back(0); v.push_back(1); }
template <class Functor = SimpleFunctor>
Je suppose que ça aurait dû être template <class Functor = SimpleFunctor<BoxType> > mais cela ne passe pas non plus car on ne peut pas avoir d'arguments par défaut dans les templates de fonction. Il suffit de surcharger cette fonction :
La version non-template sera par exemple appelée lorsqu'on met this->Print(); à la place de this->template Print<SimpleFunctor<BoxType> >(); dans "Derived2::Derived2()".
Falk
Fabien LE LEZ
On 10 Sep 2007 21:24:02 GMT, DELVA Michael :
[BCC32 Erreur] File1.cpp(36): E2270 > attendu
Le message d'erreur de Comeau <http://www.comeaucomputing.com/tryitout/> est plus instructif :
"default template arguments are not allowed for function templates"
"SimpleFunctor" n'est pas une classe, c'est un template. SimpleFunctor<int>, par contre, est une classe. SimpleFunctor<BoxType> aussi, si BoxType est une classe.
On 10 Sep 2007 21:24:02 GMT, DELVA Michael <michael@moviestats.fr>:
[BCC32 Erreur] File1.cpp(36): E2270 > attendu
Le message d'erreur de Comeau
<http://www.comeaucomputing.com/tryitout/> est plus instructif :
"default template arguments are not allowed for function templates"
"SimpleFunctor" n'est pas une classe, c'est un template.
SimpleFunctor<int>, par contre, est une classe.
SimpleFunctor<BoxType> aussi, si BoxType est une classe.
"SimpleFunctor" n'est pas une classe, c'est un template. SimpleFunctor<int>, par contre, est une classe. SimpleFunctor<BoxType> aussi, si BoxType est une classe.
Alexandre Fournier
On 10 Sep 2007 21:24:02 GMT, DELVA Michael :
[BCC32 Erreur] File1.cpp(36): E2270 > attendu
Le message d'erreur de Comeau <http://www.comeaucomputing.com/tryitout/> est plus instructif :
"default template arguments are not allowed for function templates"
À ce propos, n'y aurait-il pas une erreur de ce type dans le Stroustrup (§ 13.4.1, dans l'Edition Spéciale ) ?
-- Alexandre Fournier INRIA - Projet ARIANA 2004 route des Lucioles - BP 93 06902 Sophia-Antipolis Cedex FRANCE Tel : 04-92-38-77-73 courriel :
On 10 Sep 2007 21:24:02 GMT, DELVA Michael <michael@moviestats.fr>:
[BCC32 Erreur] File1.cpp(36): E2270 > attendu
Le message d'erreur de Comeau
<http://www.comeaucomputing.com/tryitout/> est plus instructif :
"default template arguments are not allowed for function templates"
À ce propos, n'y aurait-il pas une erreur de ce type dans le Stroustrup
(§ 13.4.1, dans l'Edition Spéciale ) ?
--
Alexandre Fournier
INRIA - Projet ARIANA
2004 route des Lucioles - BP 93
06902 Sophia-Antipolis Cedex
FRANCE
Tel : 04-92-38-77-73
courriel : alexandre.fournier@sophia.inria.fr