我正在閱讀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. python類特定方法如何工作?
- 4. 如何使用特質scala.Proxy
- 5. 如何強制一個特質來實現另一個特質
- 6. `借用'如何在沒有特質專業化的情況下工作?
- 7. 物質L&F不工作
- 8. Web工作質數計算
- 9. 如何檢查表中是否有特定類別的物質?
- 10. 如何實現許多類似的特質方法?
- 11. Scalameta Decl.Def不是工作在一個特質DEF方法
- 12. 如何使用製作來定義特質
- 13. 特質與更高Kinded類型
- 14. 特質類型和壽命問題
- 15. 未知類型:METHOD_DEF對Groovy特質
- 16. 斯卡拉:複製case類與特質
- 17. Kotlin是否有'特質'類型?
- 18. 斯卡拉特質類型不匹配
- 19. 斯卡拉特質或混凝土類
- 20. 是可遍歷一個特質或類
- 21. 特價 - 如何去除質量?
- 22. 如何專門研究特質功能?
- 23. 如何讓這個特質協變
- 24. 你如何配合生鏽的特質?
- 25. 如何收集具有獨特性質
- 26. 如何重寫PHP中的特質?
- 27. 如何在實現特質的同時在類型上放置特徵約束?
- 28. 特質實施
- 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