C++ static 函数的定义、使用,参数只有类型,没有形参是什么情况?

我在搞高斯滤波时,发现一个静态回调函数:[code=c]staticvoidmyGaussianBlur(int,void*);//这里声明没有形参很好理解intmain... 我在搞高斯滤波时,发现一个静态回调函数:

[code=c]
static void myGaussianBlur(int, void *); //这里声明没有形参很好理解

int main()
{
srcImage =imread("E:\\MIPMAP\\lena.jpg",1 );
namedWindow("Gaussian", 1);
createTrackbar("Kernel: ","Gaussian", &iGaussianBlur, 40, myGaussianBlur);//这里函数调用连括号都没带??
return 0;
}

static void myGaussianBlur(int, void *)//函数定义没有形参?还能这么写?
{
GaussianBlur(srcImage, dstImage3, Size(GaussianBlur*2 + 1, iGaussianBlur*2 +1), 0, 0);
imshow("Gaussian", dstImage3);
}[/code]

附createTrackbar原型:
[code=c]CV_EXPORTS int createTrackbar(
const String& trackbarname, constString& winname,
int*value, int count,
TrackbarCallback onChange = 0,
void* userdata = 0);
[/code]

附TrackbarCallback原型:
[code=c]typedef void(*TrackbarCallback)(int pos, void* userdata);//不知道这是什么东东[/code]

请各位大神指点一二[img=http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/3.gif][/img]
展开
 我来答
zjnny
推荐于2016-11-14 · TA获得超过2037个赞
知道小有建树答主
回答量:1055
采纳率:100%
帮助的人:1062万
展开全部

static void myGaussianBlur(int, void *);

//函数声明里的形参可以不写,只要定义时参数类型不变就不算重载,仍是一个函数

createTrackbar("Kernel: ","Gaussian", &iGaussianBlur, 40, myGaussianBlur);

//这句是把函数地址当作参数传入,是函数指针的用法,没有什么问题

static void myGaussianBlur(int, void *)//函数定义没有形参?还能这么写?

//有些时候形参只是个象征意义,比如重载++运算符里就是这种写法

//这个函数实现回调,但是没有严格按照回调的参数调用,应该在其他地方有全局变量srcImage, dstImage3等,所以不用形参也可以。

typedef void(*TrackbarCallback)(int pos, void* userdata);//不知道这是什么东东

//这就是声明函数指针类型的方法,去查查函数指针这么用就清楚了

下面写了一个例子,也是用的全局参数,没通过形参传入

#include <iostream> 
int y=10;
static void myAdd(int &)
{
y++;
}
typedef void (*ADDFUN)(int&);
void show(int val,ADDFUN f)
{
f(val);
std::cout<<val<<std::endl;
std::cout<<y<<std::endl;
}

int main()
{
show(2,myAdd);
return 0;
}
追问
第一次知道可以这么用……
有个函数指针的疑问:
一般都是直接定义:
bool (*pf)(const string &, const string &);
没有看到过
typedef bool (*pf)(const string &, const string &); 这种类型……
typedef void (*ADDFUN)(int&);
前面的typedef是不是多余的?
追答
bool (*pf)(const string &, const string &);
//上面定义后,pf只能说他是一个变量也就是pf=xxx;

加了typedef,pf就是一个类型
pf f1;f1=xxx;
int n=0; //相当于就是int和n的区别
zjfaok
2015-09-14 · TA获得超过6806个赞
知道大有可为答主
回答量:4146
采纳率:62%
帮助的人:1612万
展开全部
在哪看到这段代码,为什么认为它是正确的……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式