Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

template methode

7 réponses
Avatar
amerio
Bonjour,
J'essaye d'écrire une classe normale (non template) qui contiendrait une
méthode paramétrable (template) :

class Toto
{
public:
template <class T> T* New() const { return new T; }
};

// en fonction libre...
template <class T> T* New() { return new T; }

void test()
{
Toto t;
int *i;
i = t.New<int>(); // error : type 'int' unexpected
i = New<int>(); // ok
}

Le template en méthode ne compile pas. Est-ce un défaut de mon compilo (VC6)
ou bien est-ce illégal ?
Et comment contourner le pb (si c'est possible...)

7 réponses

Avatar
Gabriel Dos Reis
"amerio" writes:

| Le template en méthode ne compile pas. Est-ce un défaut de mon compilo (VC6)
^^^^^

Mauvais compilo, changer de compilo.

-- Gaby
Avatar
amerio
| Le template en méthode ne compile pas. Est-ce un défaut de mon compilo
(VC6)


^^^^^


Mauvais compilo, changer de compilo.


Hélas ! Si seulement Microsoft autorisait un autre compilo pour faire un jeu
XBox...
Ce n'est donc pas une option.

Cela dit, en passant un paramètre 'fantôme' ca marche :
class Toto
{
public:
template <class T> T* New(T* t=NULL) const { return new T; }
};

void test()
{
Toto t;
int *i;
i = t.New( (int*)NULL ); // OK
}

Reste la question : cette écriture est-elle portable sur gcc / CodeWarrior ?
(pour gamecube et ps2, pour ceux que ca interessent) (je n'ai pas encore les
compilo sous la main, là)

Avatar
Gabriel Dos Reis
"amerio" writes:

| Reste la question : cette écriture est-elle portable sur gcc / CodeWarrior ?

Pour GCC, oui.

-- Gaby
Avatar
Fabien LE LEZ
On Fri, 18 Jul 2003 20:05:58 GMT, "amerio" wrote:

Est-ce un défaut de mon compilo (VC6)


Oui.

--
Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/
et http://www.aminautes.org/forums/serveurs/tablefr.html
Archives : http://groups.google.com/advanced_group_search
http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html

Avatar
Arnaud Debaene
amerio wrote:
Bonjour,
J'essaye d'écrire une classe normale (non template) qui contiendrait
une méthode paramétrable (template) :

class Toto
{
public:
template <class T> T* New() const { return new T; }
};

// en fonction libre...
template <class T> T* New() { return new T; }

void test()
{
Toto t;
int *i;
i = t.New<int>(); // error : type 'int' unexpected
i = New<int>(); // ok
}

Le template en méthode ne compile pas. Est-ce un défaut de mon
compilo (VC6) ou bien est-ce illégal ?


Bug bien connu de VC6, corrigé dans VC7.

Et comment contourner le pb (si c'est possible...)
Avoir un paramètre "dummy" de type T pour ta méthode New.


Arnaud

Avatar
ns2v

Bug bien connu de VC6, corrigé dans VC7.

sauf que le compilo xbox a toujours ete basé sur le 7, meme lorsque visual 6

servait d'ide.
microsoft nous aurais menti, c un 6.5 alors :p

Avatar
amerio
Hélas ! Si seulement Microsoft autorisait un autre compilo pour faire un
jeu

XBox...


tu as quel xdk, celui de juin n'a visiblement pas ce bug, je viens
d'essayer.


Le dernier est OK, en effet. Mais pour des raisons de compatibilités avec
d'autres lib, on doit rester pour l'instant avec une version plus ancienne
(en attendant que les libs soient mises à jour).
Pour la release d'un jeu, seul VC7 (avec le dernier Xdk) est en effet
autorisé par MS.