标题<iostream>
有一个伴随<iosfwd>
,如果我只需要指针或对流的引用就足够了。后者是超载operator<<
的常见情况。
STL容器有这样的标题吗?我想定义几个引用STL容器的函数,我不想包含<vector>
,<list>
,<set>
et。人。完整的,所以我可以参考这些类型。这个问题有标准,增强或其他解决方案吗?
答案 0 :(得分:4)
是否有STL容器的标题?
不,没有。
此问题是否有标准,增强或其他解决方案?
不是我知道的。
您必须包含这些标头。
答案 1 :(得分:1)
不,不幸的是没有。该标准仅引入<iosfwd>
以实现向后兼容性,以支持为旧的非模板化IO流库编写的代码。
答案 2 :(得分:0)
实际上,为什么不能有模板类前向声明呢?
如果你迫切需要一种解决方法,你可以选择这样的东西:
namespace std {
template<typename T>
class allocator;
template<typename T, typename Alloc>
class vector;
}
添加一个包含警卫,保存为“stdfwd.h”或其他内容,然后你就可以了。
然后这样的事情不包括<vector>
:
void print(std::vector<int, std::allocator<int> >& v);
为GCC 4.5工作。我现在不知道如何为声明和定义同时具有默认参数(也是模板参数)的问题制定透明的解决方法,但这可能是 - 也许任何人都可以从这里接管? :)我认为我不会在生产代码中使用它,但看起来像一个有趣的练习。
答案 3 :(得分:-1)
使用iosfwd可以这样做,因为模板必须实例化的类型只有两种:char和wchar_t。所以你最终获得的是实例化具体类型的前向声明。另一方面,STL容器可以使用任何类型,因此STL头文件中没有任何显式内容。