Ceci marche :
##################################################################
template Facet(string facetName)
{
string Facet() {return
"
A " ~ facetName ~ "(int value)
{
_" ~ facetName ~ " = value;
return this;
}
private int _" ~ facetName ~ ";
";}
}
class A
{
mixin (Facet!("hello")());
mixin (Facet!("hello2")());
}
##################################################################
Mais pas ceci :
##################################################################
class A
{
template Facet(string facetName)
{
string Facet() {return
"
A " ~ facetName ~ "(int value)
{
_" ~ facetName ~ " = value;
return this;
}
private int _" ~ facetName ~ ";
";}
}
mixin (Facet!("hello")());
mixin (Facet!("hello2")());
}
##################################################################
Forcément, je suis très déçu, parceque le code est beaucoup moins
lisible dans le premier cas.
Autre sujet, autres problèmes, dmd2.023 est bourré de bugs, mais j'ai
du mal à trouver des codes minimaux pour les reproduire, entre autres
:
- crash lors de la déclaration d'un template faisant du
static-dispatch sur des méthodes virtuelles
- impossibilité pour le compilo de résoudre un "this" implicite dans
une classe templatée (cherche this dans "Classe" plutôt que dans
"module.Classe(template)", ça marche si on précise "this." devant les
attributs, mais c'est laid :s)
Enfin bref, c'est vraiment un compilo codé avec les pieds ^^
PS : Alex, comme tu peux le constater, tu m'as déformé avec tes mixin
bizarres :p
--
Arkanosis
Mouahahaha :-) mais c'est pas grave la maniere dont est implemente la
meta prog. Le tout c'est que ca fonctionne ! (As-tu regarde la stl ou
le code de boost avant de t'en servir ? ^^)
Tu ne peux pas declarer un template dans ton code de cette facons :
"Templates cannot be used to add non-static members or functions to
classes."
tu peux aussi faire :
/++++++++++++ BEGIN +++++++++++++/
alias char[] string;
class A
{
static string Facet(string facetName) {return
"
A " ~ facetName ~ "(int value)
{
_" ~ facetName ~ " = value;
return this;
}
private int _" ~ facetName ~ ";
";}
mixin (Facet("hello"));
mixin (Facet("hello2"));
}
/++++++++++++ END +++++++++++++/
Bisous :-)
--
Alexandre Bique (bique.a...@gmail.com)
Epita 2009 - GISTR - Yaka
Port. +336 19 42 85 26
Oui. :p [1]
> alias char[] string;
Par défaut en D2.0 :p
> class A
> {
> static string Facet(string facetName) {return
> "
> A " ~ facetName ~ "(int value)
> {
> _" ~ facetName ~ " = value;
>
> return this;
> }
>
> private int _" ~ facetName ~ ";
> ";}
> mixin (Facet("hello"));
> mixin (Facet("hello2"));
> }
T'as raison, c'est carrément mieux :D
Merci ;)
> Bisous :-)
* SMACK *
[1] nan, j'avoue, pas pour la STL
--
Arkanosis