使用范围解析运算符

使用范围解析运算符

我正在从中学习C++的书包括以下示例:

const int numMembers = tuple_size<tupleType>::value;

还有这个:
vector <int>::iterator arrIterator = intArray.begin ();

在这两种情况下,我都不清楚如何使用范围解析运算符(::)。在这些示例中,分别如何精确确定value和iterator的值?

最佳答案

在这两种情况下,合格名称都用于命名类模板特化的成员。这可以用来命名静态类成员。同样,typedefusing别名可以出现在类定义或类模板定义中,并且类型别名被认为是该类的成员。
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/

10-08 22:45