C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Template et donnée membre statique

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
adebaene@club-internet.fr
Guest





PostPosted: Thu Jun 09, 2005 8:31 am    Post subject: Template et donnée membre statique Reply with quote



Bonjour à tous,

Je me heurte à un petit problème comment déclarer une variable
statique dans une classe template quand le type de cette variable est
dépendant?

Exemple

template <class T> class CoolStuff
{
typedef typename T::CriticalSectionType CriticalSectionType;
static CriticalSectionType MyCS;
};

myCS est utilisé à différents endroits dans CoolStuff. Rien que du
très classique...
Ce code compile bien, mais ne linke pas car la définition de MyCS
n'est trouvée (elle devrait être dans un fichier source unique, mais
comme nous sommes en template...). Quelqu'un a une idée pour
contourner le problème?

Merci.

Arnaud

Back to top
Anthony Fleury
Guest





PostPosted: Sat Jun 11, 2005 9:18 am    Post subject: Re: Template et donnée membre statique Reply with quote



[email]adebaene (AT) club-internet (DOT) fr[/email] a écrit :
Quote:
Bonjour à tous,

Bonjour,

[...]

Quote:
template <class T> class CoolStuff
{
typedef typename T::CriticalSectionType CriticalSectionType;
static CriticalSectionType MyCS;
};

Ce code compile bien, mais ne linke pas car la définition de MyCS
n'est trouvée (elle devrait être dans un fichier source unique, mais
comme nous sommes en template...). Quelqu'un a une idée pour
contourner le problème?

Non justement, en template elle est présente avec la définition de la
classe, donc dans le .h par exemple, ou dans un fichier inclut dans le
fichier de définition de la classe. (§14.5.1.3)

Un exemple :
-------------- test.h ---------------------------------------

class Exemple
{
public :
struct Interne {
Interne(int Premier, int Second):Premier(Premier),
Second(Second) {}
int Premier;
int Second;
};
};
template < class T > class ExempleTemplate
{
public:
static typename T::Interne B;
};

template <class T> typename T::Interne ExempleTemplate<T>::B(0, 0);


--------------------------------------------------------------------

----------------test1.cpp-------------------------------------------
#include "test.h"
#include <iostream>

void AutreUtilisation();

int main() {
ExempleTemplate< Exemple > Var;
std::cout << Var.B.Premier << " " << Var.B.Second << std::endl;
AutreUtilisation();
std::cout << Var.B.Premier << " " << Var.B.Second << std::endl;
}

---------------------------------------------------------------------

---------------------------test2.cpp---------------------------------
#include "test.h"

void AutreUtilisation() {
ExempleTemplate< Exemple > Variable;
Variable.B.Premier = 42;
Variable.B.Second = 53;
}

---------------------------------------------------------------------

Back to top
Arnaud Debaene
Guest





PostPosted: Sat Jun 11, 2005 3:58 pm    Post subject: Re: Template et donnée membre statique Reply with quote



Anthony Fleury wrote:
Quote:
Non justement, en template elle est présente avec la définition de la
classe, donc dans le .h par exemple, ou dans un fichier inclut dans le
fichier de définition de la classe. (§14.5.1.3)

Merci!

Arnaud



Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.