使用 Args 的 n 个参数...从位置 m 开始
Using n arguments from Args... starting from position m
假设我有不同的函数,它们有可变数量的参数。第一个参数始终是通过其他方式获得的指针。我使用模板包扩展通过另一个模板获得的所有其他参数。
我用来调用这些函数的模板如下:
template<typename RT, typename... Args>
inline RT call(RT(*function)(Args...))
{
return function(pointer_from_somewhere, bind_argument<Args>::get_arg()...);
}
这显然无法编译,因为它对所有参数执行模板扩展,因此参数太多。
由于我总是通过其他方式获得第一个参数,我该如何对 sizeof...(Args) - 1
个参数进行模板包扩展,从第二个参数开始?
编辑:
虽然出于演示目的对模板进行了精简,但可能相关的是,第一个参数(指针)始终 reinterpret_cast 为第一个参数的类型。我使用 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()...);
}
假设我有不同的函数,它们有可变数量的参数。第一个参数始终是通过其他方式获得的指针。我使用模板包扩展通过另一个模板获得的所有其他参数。
我用来调用这些函数的模板如下:
template<typename RT, typename... Args>
inline RT call(RT(*function)(Args...))
{
return function(pointer_from_somewhere, bind_argument<Args>::get_arg()...);
}
这显然无法编译,因为它对所有参数执行模板扩展,因此参数太多。
由于我总是通过其他方式获得第一个参数,我该如何对 sizeof...(Args) - 1
个参数进行模板包扩展,从第二个参数开始?
编辑:
虽然出于演示目的对模板进行了精简,但可能相关的是,第一个参数(指针)始终 reinterpret_cast 为第一个参数的类型。我使用 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()...);
}