#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
并在我的 main.c 中使用了该函数。我收到错误。当然,我知道还有更多的模板参数std::list
(我认为是分配器)。但是,这不是重点。我是否必须知道模板类的完整模板声明才能转发声明?
编辑:我之前没有使用过指针 - 它是一个引用。我会用指针尝试一下。
问题不在于您无法前向声明模板类。是的,您确实需要知道所有模板参数和他们的默认值能够正确地转发声明:
namespace std {
template<class T, class Allocator = std::allocator<T>>
class list;
}
但即使是做出这样的前瞻性声明namespace std
标准明确禁止:only你可以放入的东西std
是一个模板专业化,通常std::less
在用户定义的类型上。如有必要,其他人可以引用相关文本。
Just #include <list>
不用担心。
哦,顺便说一句,任何包含双下划线的名称都保留供实现使用,因此您应该使用类似的名称TEST_H
代替__TEST__
。它不会生成警告或错误,但如果您的程序与实现定义的标识符发生冲突,则不能保证正确编译或运行:不规范的。还禁止以下划线开头后跟大写字母的名称等。一般来说,不要以下划线开头,除非你知道你正在处理什么魔法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)