 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
adebaene@club-internet.fr Guest
|
Posted: Thu Jun 09, 2005 8:31 am Post subject: Template et donnée membre statique |
|
|
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
|
Posted: Sat Jun 11, 2005 9:18 am Post subject: Re: Template et donnée membre statique |
|
|
[email]adebaene (AT) club-internet (DOT) fr[/email] a écrit :
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
|
Posted: Sat Jun 11, 2005 3:58 pm Post subject: Re: Template et donnée membre statique |
|
|
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 |
|
 |
|
|
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
|
|