boost中的string_ref和GSL中的string_span都没有定义带有一对迭代器的构造函数.这个决定的原因是什么?
通常这不是什么大问题,我可以像这样创建string_ref:
boost::string_ref s(start, std::distance(start, finish));
Run Code Online (Sandbox Code Playgroud)
但我希望构造函数采用一对迭代器的原因是因为我的代码看起来像这样:
template<typename Type, typename Iterator>
void func(const Iterator& begin, const Iterator& end)
{
Type s(begin, end);
//do stuff with s
}
Run Code Online (Sandbox Code Playgroud)
目前,我可以这样称呼它:
func<std::string>(start, finish)
Run Code Online (Sandbox Code Playgroud)
我想将其更改为:
func<boost::string_ref>(start, finish) //compile error
Run Code Online (Sandbox Code Playgroud)
但是该代码将无法编译,因为缺少构造函数在string_ref中使用一对迭代器
据我所知,gsl::string_span并std::string_view似乎有本质上使用的同一个道理。真的是这样吗?如果是这样,它们实际上是否相同?如果不是 - 它们有什么不同?