我一直在閱讀C++標準,並從那裏發現cv-qualifiers是成員函數函數簽名的一部分。如何使用cv-qualifier調用重載成員函數?
考慮下面的情況:
/******************************
* Function signature testing
*******************************/
class Signature
{
public:
void vSignature(void)
{
cout << "signature" << endl;
}
void vSignature(void) const
{
cout << "constant signature" << endl;
}
};
typedef void (Signature::*constFunc)(void) const ;
int main(void)
{
constFunc f = &Signature::vSignature;
Signature s;
s.vSignature(); //outputs 'signature'
(s.*f)(); // outputs 'constant signature'
return 0;
}
在上面的代碼,當我打電話vSignature在「普通」的方式,非const超載被調用。爲了「強制」使用const重載,我必須獲得指向vSignature函數的指針並將其轉換爲const重載。
除了上述之外,還有其他方法可以調用vSignature()const超載嗎?
第二個例子不應該是'const_cast(s)'? –
MSalters
2011-04-11 11:28:46
@MSalters:糟糕...我在那裏忘了'const'關鍵字。至於'const_cast',static_cast會做同樣的事情。 – Nawaz 2011-04-11 11:30:34
也適用於非const對象,如果它是唯一的函數簽名。 – 2011-04-11 11:47:40