Mistura código Objectivo-C e C ++
-
12-09-2019 - |
Pergunta
I têm uma aplicação Objectivo-C / C ++ que usa a funcionalidade que é fornecida por uma biblioteca de C ++.
Uma das classes C ++ inclui um enum como este:
class TheClass
{
public:
[...]
enum TheEnum
{
YES,
NO,
};
[...]
};
Incluindo (usando # Import -se que matters-) um arquivo de cabeçalho com a declaração de classe acima em uma Objective-C / C ++ arquivo de origem (* .mm) fará a compilação falhar desde o pré-processador irá substituir "SIM" por o termo "(BOOL) 1" (e também "NÃO" por "(BOOL) 0").
Existe uma maneira de corrigir isso sem renomear os valores do enum?
Solução
SIM e NÃO são predefinidos constantes em Objective-C, declarada no cabeçalho objc.h.
Você deve ser capaz de impedir que o pré-processador para expandir o "sim" e "não" macro de. Isso pode ser feito por localmente #undef
fing eles.
Mas, tecnicamente, se você estiver usando uma palavra-chave linguagem como um identificador, você pode esperar problemas. Você não vai escrever uma classe que contém um membro chamado MAX_PATH
, você iria?
Outras dicas
O #import
importa - cabeçalhos C ++ em um C Objective-arquivo de origem ++ devem ser incluídas com #include
. Eu acho que, embora não estou 100% de certeza, que a escolha de incluir directiva (#include
vs #import
) determina qual pré-processador é utilizado.
Você também pode inverter a declaração das constantes na enumeração, uma vez que, por padrão, membros de uma enumeração estão associados com números inteiros a partir de 0.
Por comentários, eu estou errado. Parece que você vai ter que reescrever o enum. Desculpe: (