У меня есть функция для сравнения строк без учета регистра, которая использует std::lexicographical_compare
с настраиваемым компаратором.
Однако я хотел бы иметь возможность сравнивать strings
, string_views
и const char*
между собой для максимального удобства и эффективности.
Итак, я подумал: что, если я создам шаблон, std::string
имеет _6 _ / _ 7_, std::string_view
имеет _9 _ / _ 10_, ... но const char*
нет, даже в виде функции, не являющейся членом.
Так что можно определять собственные _12 _ / _ 13_ перегрузки следующим образом
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
. Вместо этого используйте собственное пространство имен. - person πάντα ῥεῖ   schedule 26.10.2018namespace std
. - person François Andrieux   schedule 26.10.2018std
, - это временные специализации. - person Jesper Juhl   schedule 26.10.2018std::string_view
. Затем он работает сstd::string
,std::string_view
,const char *
или любым другим классом, который предоставляетoperator string_view
.. - person NathanOliver   schedule 26.10.2018string_view
наconst char *
. Я думаю, это одно из предполагаемых вариантов использованияstring_view
(в котором естьbegin
иend
) - person 463035818_is_not_a_number   schedule 26.10.2018begin()
иend()
в вашем собственном пространстве имен, а затем использованиеstd
с помощью директивы - person Slava   schedule 26.10.2018