【发布时间】:2011-04-22 04:55:34
【问题描述】:
#ifndef __TEST__
#define __TEST__
namespace std
{
template<typename T>
class list;
}
template<typename T>
void Pop(std::list<T> * l)
{
while(!l->empty())
l->pop();
}
#endif
并在我的主要功能中使用了该功能。我得到错误。当然,我知道std::list(我认为是分配器)有更多的模板参数。但是,这不是重点。我是否必须知道模板类的完整模板声明才能转发声明它?
编辑:我之前没有使用指针 - 它是一个参考。我用指针试试看。
【问题讨论】:
-
而在list的情况下,第二个参数是默认参数
std::allocator<T> -
人们可能会认为 STL 不包含前向声明标头是一种疏忽。另一方面,它的文件经常被包含在内,它可能不会对编译时间产生任何好处......
-
__TEST__是保留标识符,don't use it。