Rob*_*Rob 47 c++ header c++-standard-library
是否可以在头文件中转发声明STL容器?例如,请使用以下代码:
#include <vector>
class Foo
{
private:
std::vector<int> container_;
...
};
Run Code Online (Sandbox Code Playgroud)
我希望能够做到这样的事情:
namespace std
{
template <typename T> class vector;
}
class Foo
{
private:
std::vector<int> container_;
...
};
Run Code Online (Sandbox Code Playgroud)
可以这样做吗?
Rob*_*edy 34
vector在std命名空间中声明是未定义的行为.因此,您的代码可能会起作用,但也可能不起作用,编译器没有义务在您的尝试不起作用时告诉您.这是一场赌博,我不知道避免包含标准C++标题是值得的.
请参阅以下comp.std.c ++.主持讨论:
向前声明std :: vector.工作,但它是否符合法律和标准?
Eva*_*ran 17
我不这么认为,因为编译器无法知道为container_对象分配多少空间.你最多可以这样做:
std::vector<int> *container_;
Run Code Online (Sandbox Code Playgroud)
并且在构造函数中新建它,因为编译器知道指针的大小.
Seb*_*ach 10
除了其他人所说的(亚当罗森菲尔德除外)之外,你可能会发现知道有一种前瞻性的方式来声明iostream和一些相关的模板是有用的:标题<iosfwd>(见http://msdn.microsoft.com/en -us/library/1af12yty%28VS.80%29.aspx).如果标准有更多这样的标题将是有用的.
| 归档时间: |
|
| 查看次数: |
22015 次 |
| 最近记录: |