【问题标题】:static vector member variable静态向量成员变量
【发布时间】:2017-02-22 21:23:36
【问题描述】:

所以我有一个带有静态向量成员的类:

class Foo {
// some private members
public:
static vector<Bar> MyVector;
};

现在我在实际使用之前初始化 MyVector:

std::vector<Bar> Foo::MyVector;

然后我想在main()中定义一个这样的变量,但是好像不行:

Foo::MyVector::size_type t; 

这种解决方法确实有效,但看起来并不漂亮(在我看来):

vector<Bar>::size_type t;

我在这里遗漏的基本概念是什么?

编辑

重点是,在继续为它声明 size_type 之前,我是否应该总是回来查看将 MyVector 声明为 vector 的声明?

【问题讨论】:

  • 你之前在任何更简单的上试过这个吗? std::string s; s::size_type n; // ???
  • 为什么你的眼睛看起来不漂亮?
  • @OnurA。因为我需要滚动到班级才能看到 MyVector 的声明
  • @Sourena 然后您只需在 C++11 中使用 using MyVector = vector&lt;Bar&gt;; 或在以前的 C++ 版本中使用 typedef vector&lt;Bar&gt; MyVector; 定义它,因此无论何时键入 MyVector 您都不必滚动回类实际声明

标签: c++ vector static


【解决方案1】:

这不是解决方法。 MyVector 是对象。 vector&lt;Bar&gt; 是类型。 size_typevector 类中的 typedef,而不是成员变量。

【讨论】:

  • 所以我需要回去查看类中Foo:MyVector的定义,然后再继续定义一个变量来存储它的size_type?
  • @Sourena,不,通过写 vector&lt;whatever_type&gt;::size_type,您正在访问这个特定向量 type 的大小类型。
  • 在 C++11 中,可以使用 decltype(Foo::MyVector)::size_type
  • @MartinHierholzer 很有趣。你能详细说明一下吗?
  • @Sourena decltype(Foo::MyVector) 将是变量Foo::MyVector 的类型,即vector&lt;Bar&gt;。因此decltype(Foo::MyVector)::size_type 将与vector&lt;Bar&gt;::size_type 相同。您只是获得了一点灵活性,因为您不需要在代码中假设该点的类型。
【解决方案2】:

size_typestd::vector 中声明的类型。它绑定到类,而不是单个实例。此外, :: 运算符仅用于命名空间和类。您不能将其与变量一起使用。

【讨论】:

  • 感谢您的回答。我只是在想是否可以从实例中“提取”一个 typedef,而不是回头查看它的定义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
相关资源
最近更新 更多