我正在閱讀Scott Meyers的Effective C++。他正在談論特質類,我知道我需要他們在編譯期間確定對象的類型,但我無法理解他對這些類實際做了什麼的解釋? (從技術角度來看)特質類如何工作?
Q
特質類如何工作?
56
A
回答
45
也許你正在期待某種使類型特徵起作用的魔法。在這種情況下,要失望 - 沒有魔法。類型特徵爲手動爲每種類型定義。例如,考慮iterator_traits
,它爲迭代器提供類型定義(例如value_type
)。
使用它們,你可以寫
iterator_traits<vector<int>::iterator>::value_type x;
iterator_traits<int*>::value_type y;
// `x` and `y` have type int.
但是,爲了使這項工作,居然有一個明確定義某處<iterator>
頭,其內容是這樣的:
template <typename T>
struct iterator_traits<T*> {
typedef T value_type;
// …
};
這是iterator_traits
類型的部分專業化類型的形式T*
,即指針一些泛型類型。
同樣,iterator_traits
專門用於其他迭代器,例如, typename vector<T>::iterator
。
38
性狀類做不是確定對象的類型。相反,它們通常通過在trait中定義typedef或常量來提供關於類型的其他信息。
+5
+1有效結合理論和實施。 – 2013-04-23 07:27:35
相關問題
- 1. 特質特化如何實際工作?
- 2. 使用特質作爲Vec類型
- 3. 如何使用特質scala.Proxy
- 4. 如何強制一個特質來實現另一個特質
- 5. Web工作質數計算
- 6. 是可遍歷一個特質或類
- 7. 斯卡拉特質或混凝土類
- 8. 特質與更高Kinded類型
- 9. Kotlin是否有'特質'類型?
- 10. 斯卡拉特質類型不匹配
- 11. 如何收集具有獨特性質
- 12. 你如何配合生鏽的特質?
- 13. 如何讓這個特質協變
- 14. 如何在實現特質的同時在類型上放置特徵約束?
- 15. SVM如何分類工作?
- 16. python類如何工作?
- 17. flex flash.net.FileReference類如何工作
- 18. Ruby類如何工作
- 19. Keys類型如何工作?
- 20. 屬性類如何工作?
- 21. Twitter類URL如何工作?
- 22. 駝鹿特質
- 23. 內特質
- 24. 特質指針
- 25. 特質實施
- 26. 特質好壞?
- 27. 從特質
- 28. mysql表列數據類型介質int不工作
- 29. 開源代碼完整性 - 質量保證如何工作?
- 30. 獨特功能如何工作?
+1沒有魔法。儘管不存在一些特性(例如在C++ 0x標準庫中),這些特性不能僅使用語言進行可靠定義,並且編譯器需要特殊的「神奇」幫助才能工作? – UncleBens 2010-10-20 19:48:54
@UncleBens:我不知道C++ 0x定義了哪些特徵,但我確信在C++ 0x之前不存在這樣的特徵。 – 2010-10-20 21:41:02
是不是*現在* ['std :: underlying_type'](http://en.cppreference.com/w/cpp/types/underlying_type)中有一種魔法? – Wolf 2014-06-30 08:50:29