有一个strlen和一个wcslen函数,但是有一个模板化的字符数组长度函数,所以你可以做strlen<char>
或strlen<wchar_t>
之类的事情吗?
如果没有,那么我想我会写自己的。
答案 0 :(得分:21)
你有std :: string使用的char_traits帮助器。
它提供char_traits<char>::length
和char_traits<wchar_t>::length
。
答案 1 :(得分:4)
如果您使用模板,那么您不会使用std :: string(当然是模板化的)?
答案 2 :(得分:1)
template <class T> size_t strlen( T * _arg )
{
if ( _arg == 0 )
return -1;
size_t i = 0;
while ( _arg[i] != 0 ) ++i;
return i;
}
答案 3 :(得分:0)
简单的答案是std :: find,带有一个特殊的结束迭代器 永远不会匹配。 (在模板中,您正在寻找T()。)
答案 4 :(得分:0)
没有
这是因为strlen()和wcslen()是C(不是C ++)的一部分,因此处理C-Strings。
C ++通过提供std :: string(std :: wstring)来阻止使用C-Strings。这些当然是(std :: basic_string&lt; T&gt;)的模板。
不是自己编写,而是转到C ++ std :: string?
并不是更好答案 5 :(得分:0)
明显的方法是让你的函数取basic_string<CharType>
并让用户形成其中一个。然后所有长度的东西都隐藏在标准库中。
如果这不合适,只需在将它们复制到流的内部缓冲区时保持字符计数的运行轨迹。