【发布时间】:2017-06-25 06:07:22
【问题描述】:
我正在尝试使用未打包的元组调用函数,但遇到了问题。我的代码依赖于在函数为零时对函数执行特殊情况的能力。此代码不起作用,但我将如何使用有效的 c++ 完成此操作?
//Initialize Recursion
template <class ret, class ... Ts>
ret templateHelpers::callFunctionFromTuple(ret (*function)(Ts...), std::tuple<Ts...> tuple) {
return callFunctionFromTupleHelper<sizeof...(Ts), ret>(function, tuple);
}
//Recursively break down the tuple
template <int NumLeft, class ret, class ... ArgsF, class ... ArgsT, class ... Args>
ret templateHelpers::callFunctionFromTupleHelper(ret (*function)(ArgsF...), std::tuple<ArgsT...> tuple, Args... ts) {
return callFunctionFromTuple<numLeft - 1, ret>(funcTs(function, std::tuple<Tuples...> tuple, std::get<NumLeft-1>(tuple) Ts... ts));
}
//Finally Call the Function
//TODO: fix the error. Partial specialization does not work, including that <0>
template <class ret, class ... ArgsF, class ... ArgsT, class ... Args>
ret templateHelpers::callFunctionFromTupleHelper<0>(ret (*function)(ArgsF...), std::tuple<ArgsT...> tuple, Args... ts) {
return func(ts...);
}
PS 我用的是VS2017
【问题讨论】:
-
我将如何做到这一点?
-
用
operator()写一个类模板? -
@user3117152 - 查看我的回答。
-
顺便说一句
std::apply正是这样做的,如果有空,请尝试调查
标签: c++ templates variadic-templates variadic-functions