我正在用C++17编写自己的Range类,以允许在任意容器中迭代任意范围的整数,字符或元素。 我需要一个构造函数,该构造函数可以接受任何指针类型(假定为空终止),并以此初始化M_start
和M_end
迭代器。
这就是构造函数的样子:
template<typename T>
constexpr Range(T* p_string) noexcept :
m_start{p_string},
m_end{p_string + getLengthOfStringPointer(p_string)}
{}
我只需要实现泛型GetLengthOfStringPointer
,它应该适用于任何类型和大小的const
和非const
字符; char16_t
,wchar_t
,char
等等。
手动做起来没那么难,但是标准库里有这样的东西吗?
是的! 我查看了std::basic_string_view
是如何执行的,它使用了std::char_traits
。
代码简单地变成:
template<typename T>
constexpr Range(T* p_string) noexcept :
m_start{p_string},
m_end{p_string + std::char_traits<T>::length(p_string)}
{}
cpPreference.com上的std::char_traits