我有以下源代码:
std::string s;
std::string_view sv(s.begin(), s.end());
Run Code Online (Sandbox Code Playgroud)
它可以使用 MSVC 和 GCC 进行编译,但不能使用 Apple Clang 进行编译。
编写这样的函数的正确方法是什么
template< class It >
constexpr std::string_view make_string_view( It first, It last );
Run Code Online (Sandbox Code Playgroud)
是否可以使用 C++17 和 C++20 进行编译,并使用std::string_view接受两个迭代器的新构造函数(如果可能)?
您需要在编译时检查:
std::string_view::value_type您可以使用std::iterator_traits类、std::is_same_v类型特征和进行检查static_assert。完成此操作后,您可以计算从第一个到最后一个的距离(通过使用std::distance)并调用以下std::string_view构造函数:
constexpr basic_string_view( const CharT* s, size_type count );
Run Code Online (Sandbox Code Playgroud)
对于s,您可以传递std::addressof(*first),对于 count ,您可以传递调用的结果std::distance。
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |