我想與我的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