在默认参数上重载方法

时间:2009-04-16 06:52:46

标签: c++ string delimiter

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

例如,如果我有一个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 个答案:

答案 0 :(得分:4)

不,你不能 - 如果你考虑一下,默认的概念意味着'除非我另有说法,否则使用它'。如果编译器有两个默认选项,它会选择哪一个?

答案 1 :(得分:1)

如何实现2种不同的方法,如

  • split_with_default_delimiter_space
  • split_with_default_delimiter_delimit

就我个人而言,我更喜欢使用类似这样的东西(更可读的意图传达)而不是你提到的重载类型......即使编译器有可能这样做。

答案 2 :(得分:1)

为什么不调用split()两次并第二次显式传递分隔符?分隔符是否总是单个字符?

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

答案 3 :(得分:0)

您可以使用接受可变数量分隔符的分割版本(split(const char*,vector<string>),如果您想要split(const char*, const char**))或仅使用Boost Tokenizer