cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

Является ли тип T строковым типом. #362

Open apolukhin opened 3 years ago

apolukhin commented 3 years ago

Перенос предложения: голоса +2, -5 Автор идеи: Алексей Мячин

Бывают задачи, когда нужно написать шаблонный код и реализация тела функции зависит от типа T. Например, подсчитать количество передаваемых байт в зависимости от типа передаваемых данных.

За основу взял реализацию std::is_integral, получился код ниже:

template <typename >
struct _is_string_type_helper : public std::false_type { };

template <typename _CharT, typename _Traits, typename _Alloc>
struct _is_string_type_helper<std::basic_string<_CharT, _Traits, _Alloc>> : public std::true_type { };

template <class T>
struct is_string_type : public _is_string_type_helper<T>::type { };

Данный код проверяет тип T на причастность к std::basic_string.

В отдельной задачи приходилось добавлять проверку на const char *, то есть

template <>
struct _is_string_type_helper<const char *> : public std::true_type { };

Возможно проверку на const char * придется сделать отдельной.

apolukhin commented 3 years ago

iksk810, 2 октября 2018, 19:29 Настолько ли это необходимо, чтобы включать это в стандарт? А что насчёт сторонних реализаций строк (каки-нибудь QString, например)?

yndx-antoshkka, 12 октября 2018, 13:43 Тут стоит пойти немного по другому пути: продумать концепт String, да такой, который удовлетворяет большинству сторонних библиотек (QString, строке из WxWidgets и т.п.). Найти в стандарте места, где им удобно будет пользоваться, найти примеры пользовательского кода, где бы этот концепт подошел.

В виде концепта - есть шансы на принятие в стандарт. В виде type triat - шансов нет.