【发布时间】:2015-11-17 06:36:47
【问题描述】:
boost 中的 string_ref 和 GSL 中的 string_span 都没有定义采用一对迭代器的构造函数。这个决定的原因是什么?
通常这没什么大不了的,我可以像这样创建 string_ref :
boost::string_ref s(start, std::distance(start, finish));
但我希望构造函数采用一对迭代器的原因是因为我的代码如下所示:
template<typename Type, typename Iterator>
void func(const Iterator& begin, const Iterator& end)
{
Type s(begin, end);
//do stuff with s
}
目前,我可以这样称呼它:
func<std::string>(start, finish)
我想改成:
func<boost::string_ref>(start, finish) //compile error
但该代码无法编译,因为缺少构造函数在 string_ref 中采用一对迭代器
【问题讨论】:
-
我假设您的迭代器实际上是
std::string::iterator?因为string_ref引用了一个现有的字符串,所以你不能凭空构造它。 -
@MSalters 实际上,我的迭代器已经是
boost::string_ref::iterator:)。 -
在 std 未来提案组中进行了一次值得阅读的讨论:groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/…,值得一读。
标签: c++ string-view string-span