2015-04-05 13 views
9

Vorrei estendere lo std :: string e aggiungere "uguale". Così ho fatto la seguente:È possibile creare "metodi di estensione" come in C#, usando la macro in C++?

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

e utilizzato il seguente codice:

if (str.Equals("hhhhllll")) 

Quale (presumo) viene compilato in

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

E tutto viene compilato grande.

ora voglio migliorare il mio macro, aggiungere le staffe per la compilazione di

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

Ho provato qualcosa di simile:

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

Ma non verrà compilato (la macro semplicemente doesn' t fit)

Come posso ottenerlo?

+0

È per lo zucchero sintattico o qualcosa di specifico? – edmz

+0

All'inizio per lo zucchero sintattico ma soprattutto per curiosità. – OopsUser

+2

Si prega di passare attraverso questo link. http://mariusbancila.ro/blog/2014/10/15/extension-methods-in-cpp/ – Jagannath

risposta

2

La macro:

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

non va bene perché non è in linea con la definizione di macro. Puoi scrivere qualcosa come:

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

ma non ce n'è bisogno. Tutte le istanze std::string possono essere confrontate con l'overload operatror==.
Così che è possibile scrivere codice seguente:

if (str == str1) 

Utilizzando definizione di macro in C++ è altamente sconsigliato.

+0

angor, grazie per la risposta. Ma non è quello che sto cercando. Sto cercando di capire se qualcosa di simile al C# "metodo di estensione" è possibile in C++ usando le macro. Una soluzione alternativa come usare "str == str1" o "Equals (str, str1)" è buona. Ma sarà "bello" e "divertente" aggiungere qualcosa come str.equals (str2) usando le macro. hai detto "Non è in linea con la definizione macro" cosa intendi con questo? – OopsUser

+1

@OopsUser sfortunatamente lo stesso zucchero sintattico di C# non sarà possibile con le macro. –

+0

@OopsUser, penso che questo [sia stato discusso] (http://isocpp.org/files/papers/N4174.pdf). Forse per C++ 17. Ma non usare le macro, per fortuna :) – harald

Problemi correlati