使用来自Args的n个参数......从位置m开始

时间:2016-03-25 09:51:15

标签: c++ templates variadic-templates

假设我有不同的函数,它们具有可变数量的参数。第一个参数始终是通过其他方式获得的指针。我通过另一个模板使用模板包扩展获得的所有其他参数 我用来调用这些函数的模板如下:

template<typename RT, typename... Args>
inline RT call(RT(*function)(Args...))
{
    return function(pointer_from_somewhere, bind_argument<Args>::get_arg()...);
}

这显然无法编译,因为它为所有参数执行模板扩展,因此存在太多参数 由于我总是通过其他方式获得第一个参数,如何从第二个参数开始为sizeof...(Args) - 1参数进行模板包扩展?

修改
虽然为了演示目的而缩小模板,但是第一个参数(指针)总是以第一个参数的类型重新解释。我使用std::tuple_element<0, std::tuple<Args...>>::type来查找第一个参数的类型。

1 个答案:

答案 0 :(得分:2)

这是你在找什么?

template<typename RT, typename A0, typename... Args>
inline RT call(RT(*function)(A0, Args...))
{
    return function(pointer_from_somewhere, bind_argument<Args>::get_arg()...);
}