如何使用 span 来包装命令行参数
How to use span to wrap up command line args
即将推出的 C++20 std::span
的使用是否正确并且没有开销来包装命令行参数?
#include <iostream>
#include <span>
int main(int argc, const char* argv[])
{
for (auto s : std::span { argv, static_cast<std::size_t>(argc) })
std::cout << s << std::endl;
}
如果正确,我可以进一步使用 std::string_view
吗?
如果您使用 ()
而不是 {}
,则不需要非常冗长的转换:
std::span(argv, argc)
这为您提供了 char const*
的范围。您可以使用 transform
将它们 转换为 string_view
。这有一些开销,因为你需要做一堆 strlen
s:
std::span(argv, argc)
| std::views::transform([](char const* v){ return std::string_view(v); })
对于这样的东西,我有一个执行转换的函数对象,它很容易编写,所以这可能是:
std::span(argv, argc)
| std::views::transform(static_cast_<std::string_view>)
即将推出的 C++20 std::span
的使用是否正确并且没有开销来包装命令行参数?
#include <iostream>
#include <span>
int main(int argc, const char* argv[])
{
for (auto s : std::span { argv, static_cast<std::size_t>(argc) })
std::cout << s << std::endl;
}
如果正确,我可以进一步使用 std::string_view
吗?
如果您使用 ()
而不是 {}
,则不需要非常冗长的转换:
std::span(argv, argc)
这为您提供了 char const*
的范围。您可以使用 transform
将它们 转换为 string_view
。这有一些开销,因为你需要做一堆 strlen
s:
std::span(argv, argc)
| std::views::transform([](char const* v){ return std::string_view(v); })
对于这样的东西,我有一个执行转换的函数对象,它很容易编写,所以这可能是:
std::span(argv, argc)
| std::views::transform(static_cast_<std::string_view>)