0

拿这个代码:

template<typename T>
int foo()
{
    std::cout << "foo called" << std::endl;
    return 10;
};

template<typename... Ts>
std::vector<int> bar(Ts... ts)
{
    std::vector<int> vec{foo<Ts>()...};
    return vec;
};

int main()
{
    std::vector<int> vec = bar(1,2,3,4);
}

上面的代码输出:

foo called
foo called
foo called
foo called

这怎么可能?我以为我已经理解了模板参数包,但是该行如何std::vector<int> vec{foo<Ts>()...};导致foo被多次调用?是否foo返回参数包,因为我们...在函数调用上使用了运算符?

这段代码是怎么回事?

4

1 回答 1

2

foo<T>()...扩展为foo<T1>(), foo<T2>(), foo<T2>(), ...。在您的情况下,由于您的向量有四个组件,因此您的函数将通过扩展被调用四次。

于 2021-11-21T16:33:49.120 回答