繁体   English   中英

有一个strlen和一个wcslen,但是有一个像strlen这样的模板函数 <char> 或者strlen <wchar_t> ?

[英]There's a strlen, and a wcslen, but is there a template function like strlen<char> or strlen<wchar_t>?

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

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

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

它提供char_traits<char>::lengthchar_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。

C ++通过提供std :: string(std :: wstring)来阻止使用C-Strings。 这些当然是(std :: basic_string <T>)的模板。

转而使用C ++ std :: string不是更好吗?

那么显而易见的方法是让你的函数采用basic_string<CharType>并让用户形成其中一个。 然后所有长度的东西都隐藏在标准库中。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM