É possível criar “métodos de extensão” como em C #, usando macro em C ++?

9

Eu gostaria de estender o std :: string e adicionar "equals". Então eu fiz o seguinte:

#define Equals(str1) compare(str1) == 0

e usou o seguinte código:

if ( str.Equals("hhhhllll") )

Qual (eu suponho) compila para

if ( str.compare("hhhhllll") == 0 )

E tudo é ótimo.

Agora quero melhorar minha macro, adicionar colchetes para compilar

if ( (str.compare("hhhhllll") == 0) ) 

Eu tentei algo como:

    #define (str).Equals(str1) (str.compare(str1) == 0)

Mas não será compilado (a macro simplesmente não cabe)

Como posso alcançá-lo?

    
por OopsUser 05.04.2015 в 11:08
fonte

1 resposta

2

Sua macro:

#define (str).Equals(str1) (str.compare(str1) == 0)

não se ajusta porque não está de acordo com a definição de macro. Você pode escrever algo assim:

#define Equals(str, str1) (str.compare(str1) == 0)

mas não há necessidade. Todas as instâncias std::string podem ser comparadas com as operatror== sobrecarregadas.
Para que você possa escrever o seguinte código:

if (str == str1)

Usar a definição de macro em C ++ é altamente não recomendado.

    
por agnor 05.04.2015 / 12:19
fonte