我正在阅读Scott Meyers的Effective C++。他在谈论特性类,我明白我需要它们来在编译时确定对象的类型,但是我无法理解他关于这些类实际上是做什么的解释?(从技术角度)
他所说的特性类是一种元编程技术,用于获取程序中各种类型的特征信息。通过定义不同的特性类,我们可以让编译器了解到有关某个类型的信息,例如它是否具有默认构造函数、是否可拷贝等等。这种技术的好处是可以在编译期间发现一些潜在的问题,而不必等到运行时才发现。
我正在阅读Scott Meyers的Effective C++。他在谈论特性类,我明白我需要它们来在编译时确定对象的类型,但是我无法理解他关于这些类实际上是做什么的解释?(从技术角度)
他所说的特性类是一种元编程技术,用于获取程序中各种类型的特征信息。通过定义不同的特性类,我们可以让编译器了解到有关某个类型的信息,例如它是否具有默认构造函数、是否可拷贝等等。这种技术的好处是可以在编译期间发现一些潜在的问题,而不必等到运行时才发现。
iterator_traits
,它为迭代器提供 typedef(例如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;
// …
};
T*
的通用指针类型的iterator_traits
类型的部分特化。iterator_traits
也会为其他迭代器进行特化,例如typename vector<T>::iterator
。Traits类并不确定对象的类型。相反,它们通过在trait中定义typedef或常量来提供有关类型的附加信息。
std::underlying_type
中发挥一种魔力吗? - Wolfstd::underlying_type
。 - Konrad Rudolph