C ++ - 使用可变参数模板

时间:2016-10-15 15:14:44

标签: c++ c++11 templates

我有可变参数模板类的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。

1 个答案:

答案 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();
}