如何使用折叠表达式扩展到初始化列表?

问题描述 投票:0回答:1

我想在向量中插入与变量模板函数的参数一样多的零(即,在向量中参数数目零)。我正在尝试使用折叠表达式来实现这一点,并且在使用(vec.push_back(zeroHelper(args)), ...);时可以使用。

我不明白:为什么当我尝试通过直接“展开”到初始化列表中来直接初始化向量时,为什么它不起作用,如下所示:std::vector<int> vec = { (zeroHelper(args), ...) };

完整源代码:

template <typename T>
T zeroHelper (T a) { return T{0}; }

template<typename ...Args>
void printer(Args&&... args) {
    std::vector<int> vec; // = { (zeroHelper(args), ...) };
    (vec.push_back(zeroHelper(args)), ...);
    for (auto i : vec) {
        std::cout << i << '\n';
    }
}

int main()
{
    printer(1, 2, 3, 4);
    return 0;
}

And here's the source on OnlineGDB.

预期输出:

0000

使用初始化列表方法输出:

0

为什么?

我想在向量中插入与变量模板函数的参数一样多的零(即向量中参数的零个数)。我正在尝试使用折叠表达式来...

c++ c++17 variadic-templates fold-expression
1个回答
0
投票

因为

© www.soinside.com 2019 - 2024. All rights reserved.