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

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


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