直截了当,有一个类似的问题,但其核心不同。
所以,这就是我想要做的 - 假设我有一个可变参数模板函数,它接受 T ...args
和函数类型 FuncT funcName
,所以这是我们目前所拥有的:< /p>
template<typename FuncT, typename ...T>
void myFunction(FuncT (*funcName), T ...args);
现在,我想将我的函数存储在 void (*)()
(这个存储函数)。这工作得很好。
现在,我可以将一个函数传递给我的函数,如下所示:
template<typename FuncT, typename T>
void myFunction(FuncT (*funcName), T singleArgument){
funcName(T singleArgument);
}
void function(int i){
std::cout << i;
}
int main(){
myFunction(function, 5);
}
好的,我们成功地传递了一个参数,但是我传递给 myFunction()
的函数接受可变数量的参数。如果我通过 function2(int a, int b)
而不仅仅是 function(int a)
会怎样? 好吧,这就是我的问题。
当我使用时:
template<typename FuncT, typename T>
void myFunction(FuncT (*funcName), T singleArgument){
funcName(/* What should i write here */);
}
void function1(int a){
std::cout << a;
}
void function2(int a, int b){
std::cout << a << " " << b;
}
int main(){
myFunction(function1, 42);
myFunction(function2, 42, 0);
}
然后我 args
,我可以将其传递给接受 variadic template arguments
的函数,但我的函数只接受一些固定数量的 int
、char
和其他。< /p>
答案 0 :(得分:0)
我建议你使用完美转发:
#include <iostream>
template<typename FuncType, typename... Args>
void myFunction(FuncType funcName, Args&&... args){
funcName(std::forward<Args>(args)...);
}
void function1(int a){
std::cout << a;
}
void function2(int a, int b){
std::cout << a << " " << b;
}
int main(){
myFunction(function1, 42);
myFunction(function2, 42, 0);
}