我正在从中学习C++的书包括以下示例:
const int numMembers = tuple_size<tupleType>::value;
还有这个:
vector <int>::iterator arrIterator = intArray.begin ();
在这两种情况下,我都不清楚如何使用范围解析运算符(::)。在这些示例中,分别如何精确确定value和iterator的值?
最佳答案
在这两种情况下,合格名称都用于命名类模板特化的成员。这可以用来命名静态类成员。同样,typedef
或using
别名可以出现在类定义或类模板定义中,并且类型别名被认为是该类的成员。std::tuple_size<tupleType>::value
是静态成员(指定元组类型中的元素数)。 std::vector<int>::iterator
是成员类类型(并且该类型的对象可用于迭代 vector 的元素)。
例如:
template <typename T> class A
{
public:
static const int value = 3;
typedef int number_type;
using param_type = T;
using container_type = std::vector<T>;
};
int main() {
int a = A<int>::value; // a is initialized to 3
A<int>::number_type n = 0; // n is an int
A<int>::param_type p = 1; // p is an int
A<double>::param_type q = 2.5; // q is a double
A<double>::container_type v; // v is a std::vector<double>
}
(如示例所示,类模板的成员可以依赖于模板参数。)
关于c++ - 关于在STL中使用范围解析运算符的困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46886712/