任何表示函数参数的方式
Any way to express function parameters?
假设我有一个函数
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);
}
相关文章:
- 如何编写具有相同名称的相同函数,该函数在C++中几乎以相似的方式处理不同的类参数?
- 为指向成员模板参数的指针推导额外模板参数类型的紧凑方式
- 将函数作为参数传递的两种方式之间的区别
- C++17 中函数参数的指针对齐方式
- 有没有人有书面证据来保证函数中参数的定义方式与普通变量声明相同?
- 使用按插入方式排序的参数创建哈希映射
- 如何以有效的方式将输入参数传递给函数
- 有什么优雅的方式吗?(类型参数包)
- 一种体面的方式来转换const列表参考参数,然后传递到另一个函数
- 以可变参数方式绑定成员函数
- C++:此插入表达式的作用以及作为函数参数传递时的工作方式
- 将函数作为参数传递的最佳方式
- 使用可变参数模板创建传递新对象的更安全方式是否是个好主意
- 以不同方式实现可变参数构造函数的模板类:每个版本的优点和缺点是什么
- 使用命令行参数创建快捷方式
- 使用提升预处理器以迭代方式调用可变参数模板
- 具有已知类型的可变参数数量的函数,采用 c++11 方式
- 任何表示函数参数的方式
- 从其他类访问非类型模板参数的最佳方式是什么
- 以最紧凑的方式调用默认(AKA无参数)构造函数