Dans ma bibliothèque, j'ai plusieurs fonctions initialize()
et cleanup()
, pour différents modules dont elle dépend.Plusieurs définitions de ma classe de modèles
Pour rendre cette partie plus sûr à utiliser, j'ai décidé de suivre la règle de RAII et édifiés une classe de modèle Initializer
, qui prend deux fonctions en tant que paramètres:
// initializer.hpp (include guards omitted)
template <void initialize(), void cleanup()>
class Initializer
{
// Does something, but that's not relevant
};
Maintenant, dans mon dossier xml.hpp
J'ai ceci:
// xml.hpp (include guards omitted)
namespace xml
{
void initialize();
void cleanup();
typename ::Initializer<&initialize, &cleanup> Initializer;
}
cette compile très bien mais échoue sur la liaison car plusieurs fichiers comprennent xml.hpp
et gcc se plaint qu'il ya plusieurs définitions pour xml::Initializer
.
Que puis-je faire pour résoudre ce problème?
'typename' ne semble pas à sa place ici, ou votre code posté est-il incomplet? gcc dit "error: using 'typename' en dehors du template". –
@Charles Bailey: À ma place, il compilé, mais c'est en effet une erreur. Je l'ai juste changé pour "typedef" (ce que je voulais dire en premier lieu) et toutes les erreurs de liens ont disparu ... J'ai besoin de plus de café! Merci pour ça. Pouvez-vous ajouter une réponse pour que je l'accepte? – ereOn