template<typename R, typename... Args1, typename... Args2>
void Func(R (*)(Args1...), Args2...)
{ // ...
}
template<typename R, typename... Args>
void Init(R(*)(Args...))
{
// the second list is all of same types (a generic "any" type), just need same number as Args
auto ptr = &Func<R, Args..., (Misc<Args>::type)...>;
// ...
}
Init(&somefunc); // usage
代码本身就说明了,我不确定如何将两者分开,以便它们不会被连接到一个可变参数。我尝试使用另一个包含单个类型列表的类,然后Func
只需要3个参数,但我不断收到明确的模板错误。
答案 0 :(得分:0)
此类功能声明
template<typename R, typename... Args1, typename... Args2>
void Func(R (*)(Args1...), Args2...)
{ // ...
}
只能通过从参数中推导出模板参数来实例化。 但你真的需要Args1吗?怎么样:
template<typename R, typename... Args2>
void Func(R, Args2...)
{ // ...
}
template<typename R>
R Init(R)
{
// instantiate Func<>(R, int, float, int)
auto ptr = &Func<R, int, float, int>;
// ...
return ptr;
}
void foo(int, float) {
//
}
int main() {
Init(foo);
}