2010-05-24 5 views
1

Exemple: Je veux faire ceci:Comment créer une macro qui restitue une chaîne dans le code source?

METHODNAME(5) { 
    // do something 
} 

qui se traduit par:

- (void)animationStep5 { 
    // do something 
} 

Est-il possible de le faire? Fondamentalement, ce dont j'ai besoin est un moyen de générer une chaîne de code source réelle avant la compilation du programme, donc le compilateur voit - (void)animationStep5 ...

Ou peut-être il y a quelque chose de différent d'une macro, qui peut aider ici à auto- générer des noms de méthodes (pas au moment de l'exécution)?

+0

Pourquoi? Cela semble être un abus grossier du préprocesseur. – JeremyP

Répondre

1

Vous pouvez utiliser l'opérateur de concaténation

#define METHODNAME(i) -(void)animationStep##i

vous pouvez l'appeler comme

METHODNAME(5){}

Cela élargit à -(void)animationStep5{}

2

Comme déjà répondu here, le préprocesseur de l'objectif-C est très proche du C.

Vous devriez jeter un oeil sur les exemples postés ici, et jetez un oeil à C proprocessor. Vous devrez simplement utiliser la syntaxe ## du préprocesseur, pour concaténer le nom de la méthode, et le numéro que vous voulez.

1

En supposant que le préprocesseur objectif-c se comporte comme la norme C un, vous pouvez utiliser quelque chose comme:

#define PASTE(a, b) a##b 
#define METHODNAME(n) PASTE(animationStep,n) 

pour rejoindre les bits nécessaires ensemble. Cela signifie que

METHODNAME(5) 

est traduite à

animationStep5 

(vous devrez peut-être ajouter le « vide » de votre question au definitino macro selon exactement ce que vous devez faire).

Questions connexes