拿這個代碼:
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回傳引數包,因為我們...在函式呼叫中使用了運算子?
這段代碼是怎么回事?
uj5u.com熱心網友回復:
foo<T>()...擴展為foo<T1>(), foo<T2>(), foo<T2>(), .... 在您的情況下,由于您的向量有四個組件,因此您的函式將通過擴展被呼叫四次。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/368734.html
