为了账号安全,请及时绑定邮箱和手机立即绑定

如何在C中将函数作为参数传递?

如何在C中将函数作为参数传递?

C
交互式爱情 2019-07-03 11:09:28
如何在C中将函数作为参数传递?我想要创建一个函数,该函数对一组数据执行由参数传递的函数。如何在C中将函数作为参数传递?
查看完整描述

3 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

这个问题已经给出了定义函数指针的答案,但是它们可能会变得非常混乱,特别是如果要在应用程序中传递它们的话。为了避免这种不愉快,我建议您将函数指针设置为更易读的内容。例如。

typedef void (*functiontype)();

声明一个函数,该函数返回无效且不接受参数。要创建指向此类型的函数指针,现在可以这样做:

void dosomething() { }functiontype func = &dosomething;func();

对于返回int并接受char的函数,您将执行以下操作:

typedef int (*functiontype2)(char);

并利用它

int dosomethingwithchar(char a) { return 1; }functiontype2 func2 = &dosomethingwithcharint result = func2('a');

有些库可以帮助将函数指针转换为可读的类型。这个Boost函数图书馆是伟大的,是非常值得的努力!

boost::function<int (char a)> functiontype2;

比上面的好多了。


查看完整回答
反对 回复 2019-07-03
?
精慕HU

TA贡献1845条经验 获得超8个赞

因为C+11可以使用功能库以简洁和通用的方式来做这件事。语法是,例如,

std::function<bool (int)>

哪里bool是第一个参数为类型的单参数函数的返回类型。int.

我在下面列出了一个示例程序:

// g++ test.cpp --std=c++11#include <functional>double Combiner(double a, double b, std::function<double (double,double)> func){
  return func(a,b);}double Add(double a, double b){
  return a+b;}double Mult(double a, double b){
  return a*b;}int main(){
  Combiner(12,13,Add);
  Combiner(12,13,Mult);}

不过,有时使用模板函数更方便:

// g++ test.cpp --std=c++11template<class T>double Combiner(double a, double b, T func){
  return func(a,b);}double Add(double a, double b){
  return a+b;}double Mult(double a, double b){
  return a*b;}int main(){
  Combiner(12,13,Add);
  Combiner(12,13,Mult);}


查看完整回答
反对 回复 2019-07-03
  • 3 回答
  • 0 关注
  • 1632 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信