Подтвердить что ты не робот

Там strlen и wcslen, но есть ли функция шаблона, такая как strlen <char> или strlen <wchar_t>?

Там есть функция strlen и wcslen, но есть ли функция длины массива шаблонов, чтобы вы могли сделать что-то вроде strlen<char> или strlen<wchar_t>?

Если нет, то, наверное, я напишу себе.

4b9b3361

Ответ 1

У вас есть помощник char_traits, используемый std::string.

Он предоставляет char_traits<char>::length и char_traits<wchar_t>::length.

Ответ 2

Если вы использовали шаблоны, вы бы не использовали std::string (который, конечно, шаблонный)?

Ответ 3

template <class T> size_t strlen( T * _arg )
{
  if ( _arg == 0 )
    return -1;
  size_t i = 0;
  while ( _arg[i] != 0 ) ++i;
  return i;
}

Ответ 4

Простым ответом будет std:: find, со специальным концевым итератором, который никогда ничего не соответствует. (В шаблоне вы ищете T().)

Ответ 5

Нет.

Это связано с тем, что strlen() и wcslen() являются частью C (не С++) и, таким образом, обрабатывают C-строки.

С++ препятствует использованию C-Strings, предоставляя std::string (std:: wstring). Это, конечно, шаблоны (std:: basic_string <T> ).

Вместо того, чтобы писать свои собственные, не лучше ли перейти на С++ std::string?

Ответ 6

Ну, очевидно, что ваша функция принимает basic_string<CharType> и позволяет пользователю сформировать один из них. Затем вся длина материала скрыта в стандартной библиотеке.

Если это не подходит, просто продолжайте отслеживать количество символов, когда вы копируете их во внутренний буфер потока.