任何表示函数参数的方式

Any way to express function parameters?

本文关键字:方式 参数 函数 表示 任何      更新时间:2023-10-16

假设我有一个函数

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;
}

您可以使用可变函数模板和参数包。

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;
}

不是你想要的,但可能会解决你的问题:

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);
}