读书人

帮忙解释下这段代码的困惑。该如何处理

发布时间: 2012-03-17 19:06:27 作者: rapoo

帮忙解释下这段代码的困惑。。。


class F
{
......

BOOL PreSearch(void);

BOOL InitDeletePath(int idx);

BOOL InitDstPath(void);

......
}

BOOL F::PreSearch(void)
{
......

BOOL (F::*InitPath)(int) = is_delete ? InitDeletePath : InitSrcPath;

......
}

我的猜测是

如果is_delete为真,
则调用InitPath实际指向的 InitDeletePath()
如果为假,调用InitSrcPath()。

可是,在语法上还是有点困惑。。


InitPath是个函数指针吗?

is_delete ? InitDeletePath : InitSrcPath;
函数名表达的是指向该函数的地址吗?



[解决办法]
我感觉你解释的很正确
不过这种用法很少见
感觉还是用if-else比较好理解一些
[解决办法]
BOOL (F::*InitPath)(int) = is_delete ? InitDeletePath : InitSrcPath;
====================================================================
这句是错的. 应该是:
BOOL (F::*InitPath)(int) = is_delete ? &F::InitDeletePath : &F::InitSrcPath;
这样, InitPath是一个指向成员函数的指针.

[解决办法]
BOOL (F::*InitPath)(int) = is_delete ? InitDeletePath : InitSrcPath;

这个语句貌似在 F 的定义内部,
所以,
成员函数 没有用 F:: 限定应该不会有问题 ....
[解决办法]
BOOL (F::*InitPath)(int) = is_delete ? InitDeletePath : InitSrcPath;
/////////////
楼上的各位的说法很赞同。

但是,InitPath的形参是int,而InitSrcPath为void,可以这样做吗?
[解决办法]
BOOL (F::*InitPath)(int) = is_delete ? InitDeletePath : InitSrcPath;
/////////////
楼上的各位的说法很赞同。

但是,InitPath的形参是int,而InitSrcPath为void,可以这样做吗?


InitSrcPath这个函数你并没给出来啊,怎么知道它是void呢?
总之BOOL (F::*InitPath)(int) = is_delete ? InitDeletePath : InitSrcPath
就是说如果is_delete为真,这个指向成员函数的指针InitPath就指向InitDeletePath 函数.
如果is_delete为假,这个指向成员函数的指针InitPath就指向InitSrcPath函数.

[解决办法]
mark

读书人网 >C++

热点推荐