1

デフォルトパラメータでメソッドをオーバーロードすることは可能ですか?

たとえば、文字列を分割するメソッド split() があるが、文字列に「_」と「delimit」などの 2 つの区切り文字があるとします。次のような 2 つの方法を使用できますか。

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

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

または、これを達成するためのより良い方法はありますか? どういうわけか、私の脳は現在機能しておらず、他の解決策を考えることができません.

編集:問題の詳細:

たとえば、nativeProbableCause_Complete|Alarm|Text のように、2 つの区切り記号を持つ文字列があります。nativeProbableCause と Complete|Alarm|Text を分離する必要があり、さらに、Complete|Alarm|Text を個々の単語に分離し、後で区切り文字としてスペースで結合する必要があります (これについては、既にユーティリティを作成していますが、そうではありません)。大したことではありません)。私を悩ませているのは、区切られた文字列の分離だけです。

4

4 に答える 4

4

いいえ、できません。考えてみれば、デフォルトの概念は「特に断らない限りこれを使用する」ことを意味します。コンパイラにデフォルトのオプションが 2 つある場合、コンパイラはどちらを選択しますか?

于 2009-04-16T07:04:35.413 に答える
1

のような2つの異なる方法として実装するのはどうですか

  • split_with_default_delimiter_space
  • split_with_default_delimiter_delimit

個人的には、あなたが言及したタイプのオーバーロードよりも、このようなもの(より読みやすく..意図を伝える)を使用することを好みます...コンパイラがそれを行うことが何らかの形で可能であったとしても。

于 2009-04-16T07:07:00.710 に答える
1

split() を 2 回呼び出して、2 回目に区切り文字を明示的に渡さないのはなぜですか? 区切り文字は常に 1 文字ですか?

結合する前に、2 番目の単語セットに対して他の処理を実行しますか? そうでない場合、2 番目のタスクで本当にやりたいことは、部分文字列を置き換えることです。これは std::string::find と std::string::replace で最も簡単に実行できます。c-string を使用する必要がある場合は、strstr/strchr/strpbrk、strcpy、および strcat を使用するか、単に strstr/strchr/strpbrk を使用してそれらを結合することができます。

于 2009-04-16T07:41:44.340 に答える
0

split(const char*,vector<string>)可変数の区切り文字 (必要に応じてsplit(const char*, const char**))を受け入れる分割のバージョンを使用するか、 Boost Tokenizerを使用することができます。

于 2009-04-16T07:30:15.477 に答える