我们说我有一个功能
void fun1(int i, char j, char* c, long l) {...}
。有没有什么方法可以从 fun1 表达参数列表而不自己写出来?
void fun2(char additionalVar, std::getAllThoseParameters(fun1))
对于上下文,我的最终目标是写下这样的东西:
void fun1(int i, char j, char* c, long l) {...}
template<typename Fn, Fn fn>
void fun2(char additionalVar, std::getAllThoseParameters){
...
fn(std::getAllThoseParameters);
}
int main(){
fun2('a',1,'c',NULL,5l);
return 0;
}
答案 0 :(得分:2)
您可以使用可变参数函数模板和参数包。
void fun1(int i, char j, char* c, long l) {}
template<typename Fn, typename ... Args>
void fun2(Fn fn, char additionalVar, Args ... args){
fn(args ...);
}
void fun3(int i, char j) {}
int main(){
fun2(fun1, 'a',1,'c',nullptr,5l);
fun2(fun3, 'a',1,'c');
fun2( [](int i, char j, double k) -> void {}, 'a',1,'c', 1.0);
return 0;
}
答案 1 :(得分:2)
不完全是你问的问题,但可以解决你的问题:
void fun1(int i, char j, char* c, long l) {...}
template<typename Ret, typename ... Args>
void fun2(Ret (*fn) (Args...), char additionalVar, Args... args){
fn(args...);
}
int main(){
fun2(&fun1, 'a', 1, 'c', NULL, 5l);
}
或只是
template<typename Fn, Fn fn, typename ... Ts>
void fun2(char additionalVar, Ts&&... args){
fn(std::forward<Ts>(args)...);
}
与
int main(){
fun2<decltype(&func1), &func1>('a', 1, 'c', NULL, 5l);
}