Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1358 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [Solved] Namespace dynamiques

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Solved] Namespace dynamiques

n°1284344
agyspace
Posté le 16-01-2006 à 11:07:00  profilanswer
 

Hello,
 
   J'aurais besoin definir un nom de namespace qui depend de la valeur d'une certaine variable definie dans mon makefile et d'un variable predefinie qui ne change jamais (dans une macro par exemple).
 
Par exemple, si dans mon makefile j'ai:
VERSION=1-0
Je voudrais que mon namespace se nomme "Package1-0".
 
Je ne sais pas trop comment m'y prendre. J'ai essaye de definir une macro qui definit le nom de mon namespace:
#define NOM "Package"VERSION
 
Evidemment ca ne marche pas quand je fais ca:
 

Code :
  1. namespace NOM
  2. {
  3. ...
  4. }


 
Meme si je definit VERSION egalement comme une macro:
#define VERSION "1-0"
 
Quelqu'un a-t-il une idee?
 
Merci beaucoup


Message édité par agyspace le 27-01-2006 à 14:09:16
mood
Publicité
Posté le 16-01-2006 à 11:07:00  profilanswer
 

n°1284452
Joel F
Real men use unique_ptr
Posté le 16-01-2006 à 13:37:37  profilanswer
 

Code :
  1. #define BEGIN_NAMESPACE(NOM) namespace Package ## VERSION {
  2. #define END_NAMESPACE(_) }
  3. // Exemple :
  4. BEGIN_NAMESPACE(1_0)
  5. // code
  6. END_NAMESPACE()


 
Non ?
 
evite les . , ou - dans les noms du namesapce aussi ;)

n°1284547
agyspace
Posté le 16-01-2006 à 14:35:47  profilanswer
 

En fait g trouve une moyen de configurer le nom d'un namespace:
 

Code :
  1. #define CCCAPI ccconcealment


 
mais je voudrais concatener a ce nom le contenu d'une variable definie dans mon makefile. Du genre:
 

Code :
  1. #define CCCAPI ccconcealment"$VARIABLE"


 
Sauf que ca ca ne marche pas...Comment utiliser des variables definies dans un Makefile? Est-ce possible?
Si oui comment?

n°1284645
Joel F
Real men use unique_ptr
Posté le 16-01-2006 à 15:32:05  profilanswer
 

je viens de te montrer c'est ## :sarcastic:
 
#define CCCAPI ccconcealment ## VARIABLE


Message édité par Joel F le 16-01-2006 à 15:32:18
n°1284763
agyspace
Posté le 16-01-2006 à 17:22:56  profilanswer
 

Au temps pour moi j'avais mal lu ^^ :)

n°1284833
agyspace
Posté le 16-01-2006 à 18:23:41  profilanswer
 

Heu c'est la syntaxe exacte parce ke ca ne marche pas

n°1285742
slash33
Posté le 17-01-2006 à 17:09:29  profilanswer
 

Joel F a écrit :

Code :
  1. #define BEGIN_NAMESPACE(NOM) namespace Package ## VERSION {
  2. #define END_NAMESPACE(_) }
  3. // Exemple :
  4. BEGIN_NAMESPACE(1_0)
  5. // code
  6. END_NAMESPACE()




Là j'ai appris quelque chose. Sinon pourquoi le paramètre NOM dans la macro BEGIN_NAMESPACE(NOM) alors qu'il n'est pas utilisé ?

Message cité 1 fois
Message édité par slash33 le 17-01-2006 à 17:11:30
n°1285864
Joel F
Real men use unique_ptr
Posté le 17-01-2006 à 18:41:57  profilanswer
 

slash33 a écrit :

Là j'ai appris quelque chose. Sinon pourquoi le paramètre NOM dans la macro BEGIN_NAMESPACE(NOM) alors qu'il n'est pas utilisé ?


 
tu auras corrigé de toi même ...
 

Code :
  1. #define BEGIN_NAMESPACE() namespace Package ## VERSION {
  2. #define END_NAMESPACE(_) }
  3. // Exemple :
  4. BEGIN_NAMESPACE()
  5. // code
  6. END_NAMESPACE()


 
J'avais pas vu qu'il lisait la version depuis une macro ...

n°1287780
agyspace
Posté le 19-01-2006 à 18:05:38  profilanswer
 

Bon j'ai reussi a faire cette */@#$%* de concatenation  :D  
 
Pour reutiliser une variable definie dans un makefile dans son code. Par exemple:
TOTO=toto
On doit ajouter a sa ligne de compilation l'option -DNOM_DE_SON_CHOIX=$(TOTO)
Une fois dans le code, l'utilisation de la variable NOM_DE_SON_CHOIX telle quelle suffira a obtenir le contenu de TOTO.
 
Ensuite, si on veut concatener le contenu de toto a une autre "chaine", on definit une macro comme ceci:
 

Code :
  1. #define CONC(a,b)  a##b
  2. #define CONC2(a,b)  CONC(a,b)
  3. #define MY_NAMESPACE       CONC2(namebase,NOM_DE_SON_CHOIX)


 
En effet, il faut redefinir 2 fois la concatenation, car on veut expander une macro (c'est encore un peu obscure pour moi  :whistle: ). Si on ne definit qu'une fois la concatenation comme ceci:

Code :
  1. #define CONC(a,b)  a##b
  2. #define MY_NAMESPACE       CONC(namebase,NOM_DE_SON_CHOIX)


Et bien le resultat sera toujours namebaseNOM_DE_SON_CHOIX en "dur", ce n'est donc pas ce qu'on veut  :o  
 
Pour avoir un namespace qui est le resultat de la concatenation, il suffit alors de faire
 

Code :
  1. namespace MY_NAMESPACE
  2. {
  3. ...
  4. }


 
Voila, en esperant que ca ne servira pas qu'a moi, car c'est tres pratique les namespaces dynamiques dans certains cas :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [Solved] Namespace dynamiques

 

Sujets relatifs
Tableaux dynamiques[XSL] <x:copy> sur les attributs "namespacé"
[resolu] xml et namespaceLogos Dynamiques
Textes dynamiques chinois/français [resolu]using namespace std....
Variable dans sql? lien dynamiques?[RESOLU]Problème clips dynamiques et assignation...
Nom de variables dynamiques en ASP...array associatif avec valeurs dynamiques. ça passe pas.
Plus de sujets relatifs à : [Solved] Namespace dynamiques


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR