C++ 通过Lambdas解包可变参数
我试图避免外部函数或递归调用,所以我决定测试lambdas的功能,但我被卡住了。我该如何打开Args。。。如果可能,使用lambdas 我尝试使用std::tie将参数转换为tuple,然后尝试使用std::get,其中我是一个非常量整数,但失败了,因为get需要一个constexpr 我还尝试了初始化列表,我知道这会失败,但值得一试。我不想用维基百科的方式。我想这样做: 有什么想法或者我注定要失败C++ 通过Lambdas解包可变参数,c++,c++11,lambda,C++,C++11,Lambda,我试图避免外部函数或递归调用,所以我决定测试lambdas的功能,但我被卡住了。我该如何打开Args。。。如果可能,使用lambdas 我尝试使用std::tie将参数转换为tuple,然后尝试使用std::get,其中我是一个非常量整数,但失败了,因为get需要一个constexpr 我还尝试了初始化列表,我知道这会失败,但值得一试。我不想用维基百科的方式。我想这样做: 有什么想法或者我注定要失败 template<typename... Args> void fcout(cons
template<typename... Args>
void fcout(const char* s, Args... args)
{
std::function<void(Args... A)> Unpack = [&](Args... A) {
//Unpack(A...);
};
while (*s)
{
if (*s == '%')
{
if (*(s + 1) == '%')
{
++s;
}
else
{
Unpack(args...);
fcout(s + 1, args...);
return;
}
}
std::cout << *s++;
}
}
如果我正确理解了您想要实现的目标,您可以使用以下简单技巧:
std::function<void(Args... A)> Unpack = [&](Args... A) {
auto l = {((std::cout << A), 0)...};
};
调用Unpack函数对象将导致将所有参数插入std::cout,并因此打印到标准输出。如果我正确理解您试图实现的目标,您可以使用以下简单技巧:
std::function<void(Args... A)> Unpack = [&](Args... A) {
auto l = {((std::cout << A), 0)...};
};
调用解包函数对象将导致将所有参数插入std::cout,从而打印到标准输出。我试图避免使用可变模板的外部函数或递归调用;外部函数调用和递归即将发生。最好现在就接受它们。好的,但我可以用递归lambda吗?或者是FrRoad或者某种C++魔法,可能根本不存在……我不确定我理解你想要达到的目标。你能谈谈你的目标是什么吗?做一个。。。正在解包A…我想访问lambda中A的每个值。它没有打开包装。它只是通过整个事情,所以我不能做std::coutOnce你知道你想对每一个做什么,其余的不太难。所以你要做的就是做std::cout我试图避免使用可变模板的外部函数或递归调用;外部函数调用和递归即将发生。最好现在就接受它们。好的,但我可以用递归lambda吗?或者是FrRoad或者某种C++魔法,可能根本不存在……我不确定我理解你想要达到的目标。你能谈谈你的目标是什么吗?做一个。。。正在解包A…我想访问lambda中A的每个值。它没有打开包装。它只是通过整个事情,所以我不能做std::coutOnce你知道你想对每一个做什么,其余的不太难。所以你要做的就是做std::cout:O这已经足够接近了。我真的很想得到每一个论点,但我对此感到高兴。我会把它放进一条小溪里。这就够了。@CantChooseServerNames:好的,很高兴它有帮助::O这已经足够近了。我真的很想得到每一个论点,但我对此感到高兴。我会把它放进一条小溪里。这就够了。@CantChooseServerNames:好的,很高兴它有帮助: