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

Using n arguments from Args... starting from position m

本文关键字:位置 开始 参数 Args 中的 使用      更新时间:2023-10-16

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

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来找出第一个参数的类型。

这就是您想要的吗?

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