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

Алексей Мячин
Алексей Мячин

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

 

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

 

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 * придется сделать отдельной.

 



-2
рейтинг
2 комментария
iksk810

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

iksk810
yndx-antoshkka

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

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

yndx-antoshkka
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения