如果我只需要流的指针或引用,标头<iostream>
有一个伴侣就足够了。<iosfwd>
后者是重载时的常见情况operator<<
。
STL 容器有这样的标题吗?我想定义几个引用 STL 容器的函数,我不想包含<vector>
, <list>
, <set>
et。人。完整的,这样我就可以引用这些类型。这个问题是否有标准、增强或其他解决方案?
如果我只需要流的指针或引用,标头<iostream>
有一个伴侣就足够了。<iosfwd>
后者是重载时的常见情况operator<<
。
STL 容器有这样的标题吗?我想定义几个引用 STL 容器的函数,我不想包含<vector>
, <list>
, <set>
et。人。完整的,这样我就可以引用这些类型。这个问题是否有标准、增强或其他解决方案?
STL 容器有这样的标题吗?
不,没有。
这个问题是否有标准、增强或其他解决方案?
从来没听说过。
您将必须包含这些标题。
不,很遗憾没有。该标准只是<iosfwd>
为了向后兼容而引入,以支持为旧的、非模板化的 IO 流库编写的代码。
实际上,为什么不能有一个模板类前向声明?
如果您迫切需要解决方法,则可以使用以下方法:
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 为我工作。我目前不知道如何为您不能同时在声明和定义中拥有默认参数(也是模板参数)的问题制定透明的解决方法,这..但它可能是可能的 - 也许任何人都可以从这里接管?:) 我认为我不会在生产代码中使用它,但看起来像是一个有趣的练习。
使用 iosfwd 可以做到这一点,因为只有两种类型的模板必须实例化:char 和 wchar_t。所以你最终得到的是实例化具体类型的前向声明。另一方面,假设 STL 容器可以与任何类型一起使用,因此 STL 标头中没有任何明确的内容。