我需要模板函数,它将调用其他函数,其参数取自std::tuple
. 我写了一些代码,可以正确编译:
#include <tuple>
template<typename ...ARGS1, typename ...ARGS2>
void foo(const std::tuple<ARGS1...> &, const std::tuple<ARGS2...> &)
{
//call function
}
int main()
{
std::tuple<int, bool> tuple1(0, false);
std::tuple<double, void*, float> tuple2(0.0, nullptr, 0.0f);
foo(tuple1, tuple2);
return 0;
}
现在我需要再添加一个参数,它是指向函数的指针:
#include <tuple>
template<typename ...ARGS1, typename ...ARGS2>
void foo(const std::tuple<ARGS1...> &, const std::tuple<ARGS2...> &, void (*)(ARGS1..., ARGS2...))
{
//call function
}
void bar(int, bool, double, void*, float)
{
}
int main()
{
std::tuple<int, bool> tuple1(0, false);
std::tuple<double, void*, float> tuple2(0.0, nullptr, 0.0f);
foo(tuple1, tuple2, &bar);
return 0;
}
我尝试以许多不同的方式来做,但编译器总是返回template argument deduction/substitution failed
和inconsistent parameter pack deduction with '' and ''
. 我不明白,我的代码有什么问题。编译器输出中没有任何有用的信息。
有人可以帮我正确地写这个吗?