2009-04-16 12 views
1

Ist es möglich, eine Methode auf Standardparameter zu überladen?Überladen einer Methode für Standardargumente

Zum Beispiel, wenn ich eine Methode split(), um eine Zeichenfolge zu teilen, aber die Zeichenfolge hat zwei Trennzeichen, sagen '_' und "Abgrenzung". Kann ich zwei Methoden so etwas wie:

split(const char *str, char delim = ' ') 

und

split(const char *str, const char* delim = "delimit"); 

Oder gibt es einen besseren Weg, dies zu erreichen? Irgendwie funktioniert mein Gehirn nicht und ich kann mir keine andere Lösung vorstellen.

Edit: Das Problem im Detail:

ich einen String mit zwei Trennzeichen haben, sagen zum Beispiel nativeProbableCause_Complete | Alarm | Text. Ich muss nativeProbableCause und Complete | Alarm | Text trennen und dann weiter, muss ich Complete | Alarm | Text in einzelne Wörter trennen und sie später mit Leerzeichen als Trennzeichen verbinden (für die ich bereits ein Dienstprogramm geschrieben habe und isn ' t eine große Sache). Es ist nur die Trennung der begrenzten Zeichenfolge, die mich beunruhigt.

Antwort

1

Wie sei es als 2 verschiedene Methoden der Umsetzung wie

  • split_with_default_delimiter_space
  • split_with_default_delimiter_delimit

Persönlich würde ich es vorziehen, so etwas wie diese (besser lesbar .. Absicht Förder) mit über die Art der Überladung, die du erwähnt hast ... auch wenn es dem Compiler irgendwie möglich war, das zu tun.

4

Nein, Sie können nicht - wenn Sie darüber nachdenken, bedeutet die Vorstellung von einem Standard "verwenden Sie dies, wenn ich nicht anders sage". Wenn der Compiler 2 Optionen für einen Standard hat, welchen wählt er?

0

Sie könnten eine Version von Split verwenden, die eine variable Anzahl von Delimitern akzeptiert (10, wenn Sie split(const char*, const char**) möchten) oder einfach Boost Tokenizer verwenden.

+0

Ich kann Boost hier im Projekt nicht verwenden ... das ist der schlimmste Teil. :( – Shree

1

Warum nicht einfach zweimal split() aufrufen und das Trennzeichen zum zweiten Mal explizit übergeben? Werden Trennzeichen immer einzelne Zeichen sein?

Machst du irgendeine andere Verarbeitung am zweiten Satz von Wörtern, bevor du sie anschließt? Wenn nicht, dann sollten Sie für die zweite Aufgabe Teilstrings ersetzen. Dies geschieht am einfachsten mit std :: string :: find und std :: string :: replace. Wenn Sie C-Strings verwenden müssen, können Sie strstr/strchr/strpbrk, strcpy und strcat verwenden, oder nur strstr/strchr/strpbrk verwenden und sie an Ort und Stelle verbinden.