如何访问可变 lambda 函数参数
how to access variadic lambda function arguements
这里有很多关于可变参数通用 lambda 函数的文章,但是我想要一个关于如何访问 lambda 函数内部参数的简单解释
点。我正在使用旧设置来获取参数,但是我想要一个更通用的解决方案
示例 - 旧用法:
auto lambda = [](...)
{
va_list args;
va_start(args,0);
auto b = va_arg(args, const char*);
cout << "hello " << b << endl;
va_end(args);
};
lambda();
lambda("world");
显示这个:
hello
hello world
我想知道是否可以在 lambda 函数上使用可变参数模板将其重构为更通用的解决方案
还有如何访问 lambda 内部的各个参数,而不是一次访问所有参数
您可以这样做:
auto lambda = [](const auto&...args)
{
std::cout << "hello ";
const int dummy[] = {0, ((std::cout << args), 0)...};
static_cast<void>(dummy);
std::cout << std::endl;
};
或者在 C++17 中使用折叠表达式:
auto lambda = [](const auto&...args)
{
(std::cout << "hello " << ... << args) << std::endl;
};
这是我最终得到的结果:
auto lambda = [](const auto&...args)
{
typedef boost::variant<int, float, std::string> Variant;
std::vector<Variant> vec = {args...};
std::cout << "hello ";
for(auto a: vec) {
std::cout << a;
}
std::cout << std::endl;
};
lambda("world", " and ", "universe");
显示如下:
hello world and universe
似乎对向量使用了 Variant 类型,这很神奇
这里有很多关于可变参数通用 lambda 函数的文章,但是我想要一个关于如何访问 lambda 函数内部参数的简单解释
点。我正在使用旧设置来获取参数,但是我想要一个更通用的解决方案
示例 - 旧用法:
auto lambda = [](...)
{
va_list args;
va_start(args,0);
auto b = va_arg(args, const char*);
cout << "hello " << b << endl;
va_end(args);
};
lambda();
lambda("world");
显示这个:
hello
hello world
我想知道是否可以在 lambda 函数上使用可变参数模板将其重构为更通用的解决方案
还有如何访问 lambda 内部的各个参数,而不是一次访问所有参数
您可以这样做:
auto lambda = [](const auto&...args)
{
std::cout << "hello ";
const int dummy[] = {0, ((std::cout << args), 0)...};
static_cast<void>(dummy);
std::cout << std::endl;
};
或者在 C++17 中使用折叠表达式:
auto lambda = [](const auto&...args)
{
(std::cout << "hello " << ... << args) << std::endl;
};
这是我最终得到的结果:
auto lambda = [](const auto&...args)
{
typedef boost::variant<int, float, std::string> Variant;
std::vector<Variant> vec = {args...};
std::cout << "hello ";
for(auto a: vec) {
std::cout << a;
}
std::cout << std::endl;
};
lambda("world", " and ", "universe");
显示如下:
hello world and universe
似乎对向量使用了 Variant 类型,这很神奇