【发布时间】:2019-03-31 10:10:15
【问题描述】:
我有一个不区分大小写比较字符串的函数,它使用std::lexicographical_compare 和自定义比较器。
但是,我希望能够将strings、string_views 和const char* 相互比较,以获得最大的便利和效率。
所以我在想:如果我做一个模板,std::string 有 begin/end,std::string_view 有 begin/end,... 但 const char* 没有,甚至不是非成员函数的形式。
所以可以像这样定义自己的begin/end重载
namespace std {
const char * begin(const char* str) { return str; }
const char * end(const char* str) { return str + strlen(str); }
}
这样我就可以将所有内容与所有内容进行比较
std::lexicographical_compare(std::begin(a), std::end(a), std::begin(b), std::end(b), icomp );
?
如果没有,我还能如何解决我的问题?
【问题讨论】:
-
你永远不应该把东西放到
std命名空间中。请改用您自己的命名空间。 -
啊,是的,我记得 Bjarne Stroustrup 第一次开始在标准中使用“合法”来谈论定义的行为时的争议。但说真的,您可能应该为您的标题选择一个更具描述性的词。
-
@πάνταῥεῖ 有a few cases可以在
namespace std声明。 -
您可以添加到
std命名空间的唯一内容是模板特化。 -
@Youda008 只需让函数采用
std::string_view。然后它与std::string、std::string_view、const char *或任何提供operator string_view的类一起工作。
标签: c++ string string-comparison string-view