2

我试图避免外部函数或递归调用,所以我决定测试 lambdas 的功能,但我被卡住了。如果可能的话,我将如何Args...使用 lambdas 解包?

我试图std::tie将参数放入元组然后我尝试使用std::get<I>whereI是一个非常量整数,但它失败了,因为 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++;
    }
}
4

1 回答 1

4

如果我正确理解你想要达到的目标,你可以使用这个简单的技巧:

std::function<void(Args... A)> Unpack = [&](Args... A) {
    auto l = {((std::cout << A), 0)...};
};

调用Unpack函数对象将导致将所有参数插入std::cout(并因此打印到标准输出)。

于 2013-04-01T00:06:24.623 回答