我正在阅读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