我有可变参数模板类的C ++ 11代码
template <typename R, typename ...ARGS>
class MyFunction
{
}
我有一个像这样定义的方法
template <typename T, typename T2>
void Callback()
{
MyFunction<T, T2> * fptr12 = (MyFunction<T, T2> *)f;
fptr12->args = std::make_tuple(GetInput<T2>());
fptr12->call();
}
template <typename T, typename T2, typename T3>
void Callback()
{
MyFunction<T, T2, T3> * fptr12 = (MyFunction<T, T2, T3> *)f;
fptr12->args = std::make_tuple(GetInput<T2>(), GetInput<T3>());
fptr12->call();
}
f
=&gt;在字典中定义为接口IFunction
(它是基于其他参数从字典中检索的,但总是返回正确的函数,因此可以进行转换)
我想让方法Callback
对任意数量的参数(Tx)都是通用的,因此它可以与任何MyFunction
一起使用。我可以添加可变参数模板,但我不知道,如何生成tupple。
答案 0 :(得分:4)
您只需要扩展可变参数列表:
template <typename T, typename... Tn>
void Callback() {
MyFunction<T, Tn...>* fptr = static_cast<MyFunction<T, Tn...>*)(&f);
fptr->args = std::make_tuple(GetInput<Tn>()...);
fptr->call();
}