J'essaie de créer une macro qui prend une portée en tant que paramètre.
Je sais, ce n'est probablement pas une bonne chose, etc.
J'essayais cela et j'ai eu le problème que le préprocesseur recherche des virgules et des parenthèses ... le problème est avec enum.Enum déclaration à l'intérieur d'une portée qui est un paramètre d'une macro
Comment déclarer une énumération dans une étendue qui est un paramètre d'une macro? Lorsque le compilateur voit la virgule entre enum itens, il le prend comme séparateur.
Si vous êtes curieux de savoir pourquoi je suis entré dans ce domaine, c'est parce que j'ai besoin d'enregistrer mes espaces de noms et classes, pour les espaces de noms que je dois savoir quand ils sont fermés, donc je pensais créer une macro qui appelle fonction statique qui enregistre l'espace de noms, encapsule son contenu et appelle enfin une fonction statique qui supprime l'espace de noms du registre.
Avec une macro, il serait plus facile pour le codeur de faire cela et de s'assurer qu'il n'oublie pas de supprimer l'espace de noms à la fin du support.
Merci,
Joe
EDIT:
Je veux une macro qui accepte un champ en tant que paramètres:
#define MYMACRO(unkownscope) unknownscope
class MYMACRO({
// please, don't take this code seriously, it is just an example so you can understand my question
});
maintenant, si je tente:
#define MYMACRO(unkownscope) unknownscope
class MYMACRO({
enum {
anything = 1,
everything = 2
};
});
il ne compilera pas en raison de la virgule à l'intérieur de l'enum, parce que le co mpiler pense que c'est un séparateur de la macro. Il ne se fait pas par des virgules dans les parenthèses, par exemple:
int a(){
int x = anyfunction(1, 2);
}
compilerions normalement parce que la virgule est un double entre parenthèses.
Désolé pour ne pas être en mesure d'expliquer plus tôt ... mon anglais est pas bon et les mots me garder sauter = [
Ty pour les réponses!
Joe
Pourriez-vous définir ce que vous entendez comme un champ d'application? Donner quelques exemples? –
S'il vous plaît poster vos tentatives ... –
Comment enregistrer un espace de noms? – jmucchiello