Ответ 1
У вас есть помощник char_traits, используемый std::string.
Он предоставляет char_traits<char>::length
и char_traits<wchar_t>::length
.
Там есть функция strlen и wcslen, но есть ли функция длины массива шаблонов, чтобы вы могли сделать что-то вроде strlen<char>
или strlen<wchar_t>
?
Если нет, то, наверное, я напишу себе.
У вас есть помощник char_traits, используемый std::string.
Он предоставляет char_traits<char>::length
и char_traits<wchar_t>::length
.
Если вы использовали шаблоны, вы бы не использовали std::string (который, конечно, шаблонный)?
template <class T> size_t strlen( T * _arg )
{
if ( _arg == 0 )
return -1;
size_t i = 0;
while ( _arg[i] != 0 ) ++i;
return i;
}
Простым ответом будет std:: find, со специальным концевым итератором, который никогда ничего не соответствует. (В шаблоне вы ищете T().)
Нет.
Это связано с тем, что strlen() и wcslen() являются частью C (не С++) и, таким образом, обрабатывают C-строки.
С++ препятствует использованию C-Strings, предоставляя std::string (std:: wstring). Это, конечно, шаблоны (std:: basic_string <T> ).
Вместо того, чтобы писать свои собственные, не лучше ли перейти на С++ std::string?
Ну, очевидно, что ваша функция принимает basic_string<CharType>
и позволяет пользователю сформировать один из них. Затем вся длина материала скрыта в стандартной библиотеке.
Если это не подходит, просто продолжайте отслеживать количество символов, когда вы копируете их во внутренний буфер потока.