template<class... Ts, class... Ps>
void Fun(Ts... ts, Ps... ps){};
Fun(1,'a',"blah", 2.13, 3.14f);
// how do we separate which part is for ts or ps params pack
是否有一种方法可以明确注释参数的哪一部分属于ts / ps可变参数?
不,可变参数模板包是贪婪的,不能将它们放在一起。
您可以将您的包包装成元组,然后以这种方式传递。
#include <tuple>
template<class... Ts, class... Ps>
void Fun(std::tuple<Ts...> ts, std::tuple<Ps...> ps) {
// Do something with the tuples
}
int main()
{
Fun(std::make_tuple(1,'a',"blah"), std::make_tuple(2.13, 3.14f));
}
我们如何区分用于ts或ps params包的那一部分
更直接的方法是将函数重写为2个元组。
但是请注意,您已经可以拆分两个参数包。
Ts
是不可推论的,而Ps
则采用所有剩余的推论,因此,通过显式提供Ts
参数,可以拆分它们:
Fun(1, 'a', "blah", 2.13, 3.14f); // Ts: []; Ps: [int, char, const char*, double, float]
Fun<int, char>(1, 'a', "blah", 2.13, 3.14f); // Ts: [int, char]; Ps: [const char*, double, float]