我试图避免外部函数或递归调用,因此我决定测试 lambda 的强大功能,但我陷入了困境。我该如何拆包Args...
如果可能的话使用 lambda 吗?
我尝试做 std::tie
为了将参数放入元组中,然后我尝试使用 std::get<I>
哪里I
是一个非常量整数,但它失败,因为 get 需要 constexpr
.
我还尝试了初始化列表,我知道它会失败,但值得一试。我不想按照维基百科的方式来做。我想这样做:
有什么想法吗?还是我注定要失败?
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
中(因此,打印到标准输出)。
关于c++ - 通过 Lambda 解压可变参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15735925/