Ist es möglich, einen benutzerdefinierten Operator zu erstellen, mit dem man solche Dinge tun kann?
if ("Hello, world!" contains "Hello") ...
Hinweis: Dies ist eine andere Frage als "Ist es eine gute Idee,..." ;)
Ist es möglich, einen benutzerdefinierten Operator zu erstellen, mit dem man solche Dinge tun kann?
if ("Hello, world!" contains "Hello") ...
Hinweis: Dies ist eine andere Frage als "Ist es eine gute Idee,..." ;)
Wie bereits von anderen erwähnt, können Sie leider keine benutzerdefinierten Operatoren schreiben, aber mit Makros können Sie ein ähnliches Verhalten erreichen. Es ist eigentlich wirklich einfach mit C-Stil Casting siehe unten.
class To_Range{
public:
size_t start;
size_t end;
To_Range(size_t _start,size_t _end) :
start(_start), end(_end) {}
};
class Slicing_To_End{
public:
int end;
Slicing_To_End(const int& init) : end(init) {}
};
To_Range operator == (const int& start,const Slicing_To_End& end) {
return To_Range(start,end.end);
}
#define to == (Slicing_To_End)
Hier 4 to 5
gibt ein Objekt vom Typ To_Range zurück. (Slicing_To_End) überträgt 5 auf Slicing_To_End. Nun will der Compiler einen passenden == Operator finden. Der einzige ist unser benutzerdefinierter Operator, der als Eingabe eine ganze Zahl an der ersten Position und an der zweiten Slicing_To_End nimmt und unseren Typ To_Range zurückgibt. Man könnte natürlich auch andere Typen wie int, float zurückgeben.
Ihr Vorschlag wäre nichts weiter als syntaktischer Zucker für:
if( contains( "Hello, world!", "Hello" ) ...
und in der Tat gibt es sowohl in cstring als auch in std::string bereits eine Funktion dafür. Das ist vielleicht ein bisschen wie die Antwort auf die Frage "Ist das eine gute Idee?", aber nicht ganz, sondern eher die Frage "Warum sollten Sie das wollen/brauchen?"
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.