向前声明一个STL容器?

是否有可能在文件中转发声明一个STL容器? 例如,采取以下代码:

#include <vector> class Foo { private: std::vector<int> container_; ... }; 

我想能够做到这样的事情:

 namespace std { template <typename T> class vector; } class Foo { private: std::vector<int> container_; ... }; 

可以这样做吗?

3 Solutions collect form web for “向前声明一个STL容器?”

std命名空间中声明vector未定义的行为 。 所以,你的代码可能工作,但也可能不行,编译器没有义务告诉你什么时候你的尝试不能工作。 这是一场赌博,我不知道避免包含标准的C ++头文件是值得的。

请参阅以下comp.std.c ++。主持的讨论:

向前声明std :: vector。 工程,但它是合法的和标准兼容?

我不这么认为,因为编译器无法知道为container_对象分配了多less空间。 充其量你可以做到:

 std::vector<int> *container_; 

并在构造函数中新build它,因为编译器知道指针的大小。

除了别人所说的(除了Adam Rosenfield)之外,你可能会发现有一种被认可的方式来向前声明iostreams和一些相关的模板:头文件<iosfwd> (参见http://msdn.microsoft.com&#x3002; com / en-us / library / 1af12yty%28VS.80%29.aspx )。 如果标准具有更多这样的标题,这将是有用的。

  • 为什么std :: vector和std :: array的C ++ initializer_list行为不同?
  • 将vector<T>转换为initializer_list <T>
  • C ++sorting和跟踪索引
  • 为什么我需要std :: get_temporary_buffer?
  • 定位C ++ 03时使用std :: basic_string <t>作为连续缓冲区是否合理?
  • std :: for_each over for循环的优点
  • 迭代std :: vector:unsigned与有符号的索引variables
  • 用C ++ / STL存储二进制数据的“正确”方法
  • (1)A && - > A&,(2)A &&&> A&,(3)A &&&&> A&,和(4)A && && - > A &&
  • boost是否具有比STL更简单的set操作的数据types?
  • 如何有效地清除std ::队列?