Les templates ne sont pas mixables si déclarés dans une classe

0 views
Skip to first unread message

Arkanosis

unread,
May 12, 2008, 12:41:01 PM5/12/08
to dcom...@googlegroups.com
Iop !

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

Alexandre Bique

unread,
May 12, 2008, 4:39:59 PM5/12/08
to dcom...@googlegroups.com
> PS : Alex, comme tu peux le constater, tu m'as déformé avec tes mixin
> bizarres :p

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

Arkanosis

unread,
May 13, 2008, 8:10:17 AM5/13/08
to dcom...@googlegroups.com
Le 12 mai 2008 22:39, Alexandre Bique <bique.a...@gmail.com> a écrit :
> (As-tu regarde la stl ou le code de boost avant de t'en servir ? ^^)

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

Reply all
Reply to author
Forward
0 new messages