我有一個類,其唯一的數據成員是一個32位無符號整數。也就是說,類看起來是這樣的:從常量用戶定義的類轉換爲C++中的內建類型
class A {
protected:
unsigned int bits;
/* ... some methods ... */
public:
/* ... some methods ... */
};
但我希望它也能隱式轉換和從32位無符號整數。所以,我在一個拷貝構造函數增加以及鑄造操作:
class A {
protected:
unsigned int bits;
/* ... some methods ... */
public:
A(): bits(0) {} // default constructor
A(const unsigned int i): bits(i) {} // convert from unsigned int to A
operator unsigned int() { return bits; } // convert from A to unsigned int
/* ... some methods ... */
};
所以現在例如,我可以做以下的事情:
int main() {
// default constructor
A a0 = A();
// convert from unsigned int
A a1 = 1 + 2;
// conversions between the two types:
unsigned int result = (a0 & a1 + 5)/2;
}
但是我努力得到它的工作與const
類型。具體而言,以下不工作:
int main() {
const A a = 5; // works
unsigned int i = a; // compiletime error
}
它說:「沒有合適的轉換函數從‘常量A’到‘無符號整數’存在。」我使用Microsoft提供的默認編譯器使用Visual Studio 2010。
我需要創建什麼轉換函數才能正常工作?
回覆:「但我希望它也能夠隱式轉換爲32位無符號整數。」小心你要求的東西。隱式轉換會讓你在最後期望的時候遇到困難,而有經驗的C++程序員通常會避免允許在類中進行隱式轉換,除非在少數情況下。通過允許類「A」的這種隱式轉換,您認爲您會獲得什麼好處? – 2012-04-08 03:48:22
@Insilico:更清晰的代碼,因爲當我對位執行操作時,我無需在任何地方寫劇集。 – Cam 2012-04-08 03:49:50
使用公共方法或運算符重載來實現這些位操作是不夠的? – 2012-04-08 03:51:01