2012-05-03 9 views
5

Mam coś takiego w mojej klasie objective-cCzy można zastąpić część słowa preprocesorem?

@interface PREFIX_MyClass { 
... 
@end 

i chciałbym użyć preprocesor, aby przekształcić go:

@interface AwesomeMyClass { 
... 
@end 

więc coś

#define PREFIX_ Awesome 

nie działa, ponieważ jest częścią słowa. W inny sposób? Wiem, że mogę używać coś takiego:

#define PrefixClass(NAME) Awesome##NAME 

@interface PrefixClass(MyClass) 

ale nie podoba mi się to, bo to łamie kod kompletne i odniesienie do następujących w dev narzędzi (tj: Xcode w tym przypadku)

+2

Po prostu ciekawy, czy to hack przestrzeni nazw? Próbuję zrozumieć powód tego, co próbujesz zrobić, i po prostu nie widzę tego. – dasblinkenlight

+0

@dashblinkenlight tak, jest to zautomatyzowane tworzenie przestrzeni nazw. – pho0

+0

Jestem pewien, że widziałem projekt o otwartym kodzie źródłowym, który to robi, ale nie mogę na całe życie znaleźć go ponownie. – malhal

Odpowiedz

2

To nie jest bardzo elegancki, ale można użyć preprocesora, aby zastąpić całą nazwę klasy zamiast tylko części.

#define PREFIX_MyClass AwesomeMyClass 
@interface PREFIX_MyClass 

Oczywiście staje się to problemem, jeśli używasz prefiksu więcej niż jeden raz i to się zmienia. Można to naprawić, używając innego wywołania innego makra, aby dodać prefiks, tak aby tylko jedno makro zawierało rzeczywisty prefiks.

#define ADD_PREFIX(name) Awesome##name 
#define PREFIX_MyClass ADD_PREFIX(MyClass) 
@interface PREFIX_MyClass 

ta nadal wymaga makro dla wszystkiego co chcesz prefiks, ale uzupełnianie kodu rozpozna nazwę PREFIX_MyClass.

+0

Tak, tak to teraz robię. Miałem nadzieję, że zdobędę coś, co nie wymaga nowego zdefiniowania dla każdej klasy. – pho0

+0

@ pho0 Następnie po prostu zadeklaruj wszystkie klasy za pomocą makra: '@interface ADD_PREFIX (MyClass)' –

+0

@ 0x69, problem polega na tym, że tracę referencję i pełne wsparcie dla kodu. Mogę prosić o zbyt wiele;) – pho0

0

Nie jest to dokładnie to, o co prosisz, ale może to być kolejna droga do osiągnięcia celu. Xcode pozwala zdefiniować prefiks klasy dla twojego projektu. Wybierz swój projekt w nawigatorze plików, aw Inspector File (pierwszy „zakładki” w prawym bocznym) trzeba będzie to:

enter image description here

Cokolwiek tekst można umieścić w „Class przedrostek” polu będzie poprzedzone nazwami wszystkich klas tworzonych w tym projekcie.

+0

Jacques, tak, rozważaliśmy to, ale potrzebujemy przedrostków, które można zmienić poprzez edycję preprocesorów. – pho0

Powiązane problemy