Afficher un message
Vieux 08/05/2008, 23h57   #4
Fabien LE LEZ
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: assurer l'héritage d'un template

On Fri, 09 May 2008 00:21:26 +0200, jeremie fouche <jfouche@voila.fr>:

> void Do(void)


Note en passant : le deuxième "void" est totalement inutile, et
typique d'un code en C. En C++ on écrira plutôt :

void Do()



>class B : public A
> Do<B>(); // OK, ca doit compiler
> Do<A>(); // ne doit pas compiler
> Do<C>(); // ne doit pas compiler


En résumé :

- si T = A, erreur de compilation
- sinon, si T dérive de A, OK
- sinon, erreur

C'est bien ça ?

Ça ressemble fort aux sections 2.7 et 2.1 de "Modern C++ Design"
(Alexandrescu).


Apparemment que le code suivant répond à la question :

#include "static_check.h"
#include "TypeManip.h"

class D
{
public:
void Test()
{
Do<B>(); // OK, ca doit compiler
//Do<A>(); // ne doit pas compiler
//Do<C>(); // ne doit pas compiler
}

public:
template <class T>
void Do()
{
STATIC_CHECK (SUPERSUBCLASS_STRICT (A, T), T_doit_deriver_de_A);
...
}
};

Les deux .h se trouvent dans Loki.
La version d'origine (basée sur le livre, et sur laquelle se base le
code ci-dessus) se trouve à l'adresse
<http://www.awprofessional.com/content/images/0201704315/sourcecode/loki.zip>.
Pour le reste, cf <http://en.wikipedia.org/wiki/Loki_%28C%2B%2B%29>.

  Réponse avec citation
 
Page generated in 0,05999 seconds with 9 queries