c++ 如何检查一个类是否有特定的构造函数?

pobjuy32  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(223)

我有下面的源代码:

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构造函数接受两个迭代器(如果可能的话)?

ebdffaop

ebdffaop1#

您需要在编译时检查:
1.迭代器是随机访问的
1.它们的值类型为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 );

对于s,您可以传递std::addressof(*first),而对于count,则可以传递std::distance调用的结果。

相关问题