是否可以在默认参数上重载方法?
例如,如果我有一个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分成单个单词,然后将它们作为分隔符连接回来(之后我已经写了一个实用程序并且不是'这很重要)。这只是分隔字符串的分离让我烦恼。
答案 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。