有一个strlen和一个wcslen,但是有一个模板函数,比如strlen <char>或strlen <wchar_t>?</wchar_t> </char>

时间:2011-03-31 17:42:28

标签: c++

有一个strlen和一个wcslen函数,但是有一个模板化的字符数组长度函数,所以你可以做strlen<char>strlen<wchar_t>之类的事情吗?

如果没有,那么我想我会写自己的。

6 个答案:

答案 0 :(得分:21)

你有std :: string使用的char_traits帮助器。

它提供char_traits<char>::lengthchar_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>并让用户形成其中一个。然后所有长度的东西都隐藏在标准库中。

如果这不合适,只需在将它们复制到流的内部缓冲区时保持字符计数的运行轨迹。