Próbuję utworzyć definicję makra, która może emitować C++ lub Objective-C w zależności od kontekstu, ale nie może łatwo zbudować NSString wewnątrz makra. wersja C++ jest prosta, ponieważ używa regularnych ciągów, ale co jeden, który emituje NSString jest udowodnienie trudne:Definicja preprocesora Objective, Dynamic C-String na NSString Declaration
#define FOO(x) bar(@##x)
Zamierzony rezultat jest konwersja argument ciąg do argumentu NSString poprzedzając z @
:
FOO("x")
// => bar(@"x")
Co dostanę w zamian jest błąd, który uniemożliwia kompilacji:
Pasting formed '@"x"', an invalid preprocessing token
'CFSTR' jest obiecujący, ale jest' CFStringRef', a nie 'NSString *'. – tadman
@tadman są jednym i tym samym, i są wolne od opłat mostowych. –
@tadman: CFStringRef = NSString. – Dani