1

是否可以在默认参数上重载方法?

例如,如果我有一个 split() 方法来拆分字符串,但该字符串有两个分隔符,比如 '_' 和 "delimit"。我可以有两种方法吗:

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

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

或者,有没有更好的方法来实现这一点?不知何故,我的大脑现在不工作,无法想到任何其他解决方案。

编辑:详细的问题:

我有一个带有两个分隔符的字符串,例如 nativeProbableCause_Complete|Alarm|Text。我需要将 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() 两次并第二次显式传递分隔符?分隔符总是单个字符吗?

在加入第二组单词之前,您是否对它们进行了任何其他处理?如果不是,那么对于第二个任务,您真正想要做的是替换子字符串。使用 std::string::find 和 std::string::replace 最容易做到这一点。如果您必须使用 c-strings,您可以使用 strstr/strchr/strpbrk、strcpy 和 strcat,或者只使用 strstr/strchr/strpbrk 并将它们连接到位。

于 2009-04-16T07:41:44.340 回答
0

您可以使用一个版本的 split 接受可变数量的分隔符(split(const char*,vector<string>)如果您愿意的话split(const char*, const char**)),或者只使用Boost Tokenizer

于 2009-04-16T07:30:15.477 回答