我正在尝试对我的 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 类中注释 setA(A),编译器认为这两行都可以(!)
它是编译器错误吗?
有没有办法在不修改 B 类签名的情况下规避这种情况?
编辑 :
实际上,我发布的代码是从我的真实类中过度简化的并且确实编译了..
这是一个真正重现该错误的修改版本:
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 cast' :不可能将 'overloaded-function' 转换为 'void (__thiscall B::* )(float)'