我想与我的C++代码的一些结合,并使用指针成员函数。成员函数指针古怪
我有以下代码:
class A
{
explicit A(float);
}
class B
{
void setA(A);
void setA(float);
}
然后我声明指针成员函数:
(void (B::*)(A))&B::setA
(void (B::*)(float))&B::setA
编译器(MSVC11)发现第二行是不明确的。
如果我评论在B级组A(A),这两条线被认为是由编译器OK(!)
它是一个编译器错误?
有没有办法规避,在不修改B类的签名?
编辑:
其实,我贴的代码是从我真正的类过于简单,也编译..
下面是修改后的版本,真正再现BUG:
class A
{
public:
explicit A(float f=1.0f, float g=1.0f) {}
};
class B
{
public:
void setA(A){}
void setA(float f, float g=1.0f){}
};
与
(void (B::*)(A))&B::setA
(void (B::*)(float))&B::setA
(void (B::*)(float,float))&B::setA
第二行出现编译错误: 错误C2440:'type casting':无法将'overloaded-function'转换为'void(__thiscall B :: *)(float)'
好的,但是,那么为什么代码编译,如果setA(A)不存在?编译器是否过于自由? – Mikarnage 2013-04-11 22:19:19
@Mikarnage:哦,看起来我太过于肤浅了。我会尝试纠正答案。对不起, – 2013-04-11 22:20:37
@Mikarnage:我编辑过。希望澄清一下 – 2013-04-11 22:23:35