此示例程序无法编译,因为transform_view
无法转换为std::span
:
class Foo {
private:
std::vector<std::string> strings = { "a", "b", "c" };
public:
std::span<const char*> getStrings() {
return strings | std::views::transform([](const std::string& str) { return str.c_str(); });
}
};
int main() {
Foo foo;
auto strings = foo.getStrings();
for (auto s : strings)
std::cout << s << std::endl;
}
我知道还不能构造容器(如std::vector
),但是我不太明白,为什么不能从中构造 a std::span
。我找到了这个答案,也就是说,目前唯一可以从任意范围构造的容器是std::span
,所以我希望上面的示例能够工作。
有没有办法从一个范围创建一个跨度?或者有没有其他方法可以从方法返回通用视图,而不使用auto
(虚拟方法不允许这样做)?