帮忙解释下这段代码的困惑。该如何处理
帮忙解释下这段代码的困惑。。。
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
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