1
A
回答
0
最有可能的是,你指的是一個輕量級的內聯(頭文件)包裝類,雖然我不熟悉這個術語。像這樣添加抽象級別在允許通用客戶端代碼方面很有用。
4
透明類包裝器是一個類型的包裝器,其中包裝器的行爲與基礎類型相同 - 因此是「透明的」。
解釋它,以及它的使用,這裏是一個例子,只要它被用來在我們結束了int
但超載operator++()
輸出消息(由this thread啓發):
class IntWrapper {
int data;
public:
IntWrapper& operator++() {
std::cout << "++IntWrapper\n";
data++;
return *this;
}
IntWrapper(int i) : data(i) {}
IntWrapper& operator=(const IntWrapper& other)
{
data = other.data;
return *this;
}
bool operator<(const IntWrapper& rhs) const { return data < rhs.data; }
// ... other overloads ...
};
然後我們就可以替代用法的int
與IntWrapper
如果我們選擇:
for (int i = 0; i < 100; ++i) { /* ... */ }
// becomes
for (IntWrapper i = 0; i < 100; ++i) { /* ... */ }
除了後者將打印時前增量被稱爲消息。
請注意,我提供了一個非顯式構造函數IntWrapper(int i)
。這可以確保,無論何時我使用int
(其中IntWrapper
是預期的)(例如IntWrapper i = 0
),編譯器都可以靜默地使用構造函數在int
之外創建IntWrapper
。正是出於這個原因,Google C++風格指南不鼓勵使用單參數的非顯式構造函數,因爲可能會出現您不期望的轉換,這會損害類型安全性。另一方面,這正是你想要的透明類包裝器,因爲你確實希望這兩種類型可以很容易地轉換。
即:
// ...
explicit IntWrapper(int i) ...
// ...
IntWrapper i = 0; // this will now cause a compile error
相關問題
- 1. C#中透明類或透明方法是什麼?
- 2. 在C++中爲C風格對象創建透明包裝類
- 3. 什麼是「不透明」鍵?
- 4. maven用假包裝類型做什麼?
- 5. 什麼是透明的使用?
- 6. C# - 透明表
- 7. 包裝與不透明度和設置div在這個包裝沒有不透明
- 8. 爲什麼我的'透明'覆蓋視圖不透明?
- 9. 爲什麼我的透明圖標不會呈現爲透明?
- 10. 裝飾器比適配器更透明是什麼意思?
- 11. Win32 C++ SetLayeredWindowAttributes要麼完全不透明要麼完全透明;沒什麼所以
- 12. 使用Java包裝類聲明變量
- 13. Comparator與包裝類有什麼不同?
- 14. 爲什麼Java中有包裝類?
- 15. Java:爲什麼需要包裝類?
- 16. 爲什麼我們需要包裝類
- 17. 爲什麼JAX-WS需要包裝類?
- 18. Objective-C中包裝C++類
- 19. 包裝C#CLI類爲C#
- 20. 什麼是最好的方式來包裝第三方類c#
- 21. C#透明按鈕
- 22. 透明的ListView C#
- 23. C#透明窗體
- 24. 什麼是不透明的字段?
- 25. 爲什麼point()函數稍微透明?
- 26. 爲什麼JFrame仍然不透明?
- 27. 什麼是透明邊框的CSS?
- 28. 爲什麼填充0xFFFFFFFF是透明的?
- 29. 背景是什麼:透明url();做?
- 30. 爲什麼UIActionSheet在展示時透明?
這個詞我是從 '谷歌C++風格指南' 了。它說:「我們要求所有單個參數構造函數都是顯式的,而打算成爲其他類的透明包裝的類是例外。」僅供參考http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=Explicit_Constructors#Explicit_Constructors。所以我好奇什麼是「透明類包裝」 – 2013-05-07 03:58:23