Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Gabriel Dos Reis
Laurent Rineau writes:
| (Ceci est mon premier message dans fr.comp.lang.c, et même sur Usenet en | général.) | | On peut faire ce genre de choses en C++ : | | template <typename Model> | struct Concept { | | Model& self() | { | return static_cast<Model&>(*this); | } | | void f() | { | self.f_impl(); | } | }; | | struct Model: public Concept<Model> | { | void f_impl() {}; | }; | | Ainsi, Model::f() est une fonction de la superclass Concept dont le | comportement dépend de la classe dérivée Model. C'est décrit dans [1] (si | d'ailleurs quelqu'un peut me dire comment lire ce genre de chose, il faut | être abonné ?).
| La définition de Model provoque | l'instanciation de Concept<Model>. Alors que, bizarrement, le fait que | Model::f_impl() soit défini après la ligne 18 ne gène pas le comp ilateur, | le fait que Model::f_return_type le soit semble provoquer | l'erreur. Pourquoi cette différence ?
| (Ceci est mon premier message dans fr.comp.lang.c, et même sur Usenet en
| général.)
|
| On peut faire ce genre de choses en C++ :
|
| template <typename Model>
| struct Concept {
|
| Model& self()
| {
| return static_cast<Model&>(*this);
| }
|
| void f()
| {
| self.f_impl();
| }
| };
|
| struct Model: public Concept<Model>
| {
| void f_impl() {};
| };
|
| Ainsi, Model::f() est une fonction de la superclass Concept dont le
| comportement dépend de la classe dérivée Model. C'est décrit dans [1] (si
| d'ailleurs quelqu'un peut me dire comment lire ce genre de chose, il faut
| être abonné ?).
| La définition de Model provoque
| l'instanciation de Concept<Model>. Alors que, bizarrement, le fait que
| Model::f_impl() soit défini après la ligne 18 ne gène pas le comp ilateur,
| le fait que Model::f_return_type le soit semble provoquer
| l'erreur. Pourquoi cette différence ?
| (Ceci est mon premier message dans fr.comp.lang.c, et même sur Usenet en | général.) | | On peut faire ce genre de choses en C++ : | | template <typename Model> | struct Concept { | | Model& self() | { | return static_cast<Model&>(*this); | } | | void f() | { | self.f_impl(); | } | }; | | struct Model: public Concept<Model> | { | void f_impl() {}; | }; | | Ainsi, Model::f() est une fonction de la superclass Concept dont le | comportement dépend de la classe dérivée Model. C'est décrit dans [1] (si | d'ailleurs quelqu'un peut me dire comment lire ce genre de chose, il faut | être abonné ?).
| La définition de Model provoque | l'instanciation de Concept<Model>. Alors que, bizarrement, le fait que | Model::f_impl() soit défini après la ligne 18 ne gène pas le comp ilateur, | le fait que Model::f_return_type le soit semble provoquer | l'erreur. Pourquoi cette différence ?