2015-04-05 9 views
9

Ich würde gerne die std :: string erweitern und "gleich" hinzufügen. Also habe ich die folgende:Ist es möglich, "Extension-Methoden" wie in C# zu erstellen, indem Makro in C++ verwendet wird?

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

und verwendet den folgenden Code:

if (str.Equals("hhhhllll")) 

Welche (ich nehme an) kompiliert

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

Und alles kompiliert groß.

Jetzt möchte ich mein Makro verbessern, fügen Sie Klammern kompilieren

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

ich so etwas versucht haben:

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

Aber es wird nicht kompilieren (das Makro einfach doesn‘ t fit)

Wie kann ich es erreichen?

+0

Ist es für syntaktischen Zucker oder etwas bestimmtes? – edmz

+0

Zuerst für syntaktischen Zucker, aber hauptsächlich aus Neugier. – OopsUser

+2

Bitte gehen Sie über diesen Link. http://mariusbancila.ro/blog/2014/10/15/extension-methods-in-cpp/ – Jagannath

Antwort

2

Ihr Makro:

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

passt nicht, weil es mit Makro-Definition nicht im Einklang ist. Sie können etwas wie dieses schreiben:

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

aber es gibt keine Notwendigkeit. Alle std::string Instanzen können mit dem überladenen operatror== verglichen werden.
Damit Sie folgenden Code schreiben:

if (str == str1) 

Verwenden von Makrodefinition in C++ ist sehr unrecommended.

+0

angor, Danke für Ihre Antwort. Aber ich suche nicht danach. Ich versuche herauszufinden, ob in C++ mit Makros etwas ähnlich wie C# "Extension-Methode" möglich ist. Ein Workaround wie "str == str1" oder "Equals (str, str1)" ist schön. Aber es wird "cool" und "Spaß" sein, etwas wie str.equals (str2) mit Makros hinzuzufügen. Sie sagten "Es ist nicht im Einklang mit Makrodefinition" Was meinst du damit? – OopsUser

+1

@OopsBenutzen des gleichen syntaktischen Zuckers wie in C# ist mit Makros leider nicht möglich. –

+0

@OopsUser, ich denke das [wurde diskutiert] (http://isocpp.org/files/papers/N4174.pdf). Möglicherweise für C++ 17. Aber nicht mit Makros, zum Glück :) – harald

Verwandte Themen