我有下面的源代码:
std::string s;
std::string_view sv(s.begin(), s.end());
它使用MSVC和愚者编译,但不使用Apple Clang编译。
如何编写一个函数,如
template< class It >
constexpr std::string_view make_string_view( It first, It last );
它可以用C++17和C ++20编译,并使用新std::string_view
构造函数接受两个迭代器(如果可能的话)?
1条答案
按热度按时间ebdffaop1#
您需要在编译时检查:
1.迭代器是随机访问的
1.它们的值类型为
std::string_view::value_type
你可以使用
std::iterator_traits
类、std::is_same_v
类型特征和static_assert
进行检查。完成这些之后,你可以计算从第一个到最后一个的距离(通过使用std::distance
),并调用下面的std::string_view
构造函数:对于
s
,您可以传递std::addressof(*first)
,而对于count,则可以传递std::distance
调用的结果。