我正在写一个模板类,比如说
template <class T>
class bla {
bla() ;
~bla() ;
};
template <class T>
bla<t>::bla(){}
template <class T>
b<t>::~b(){}
只要T为int
,char
等等,这样就可以正常工作......但是如果它是自定义类MyClass
,它将重新引用头文件MyClass.h
被包括在内,还是我错了?
问题:如何以模板方式完成,例如
#include "T.h"
干杯!
答案 0 :(得分:4)
当您使用bla<MyClass>
时,您需要包含bla
的定义和MyClass
的定义。定义MyClass
时,不必知道bla
。关于此的神奇之处称为“两阶段名称查找”:在编译模板定义时,将查找不依赖于模板参数的所有名称。在第二阶段,当实例化模板时,在实例化的上下文中查找所有剩余的名称。
答案 1 :(得分:1)
MyClass
,那么您将包含模板容器(上面放置的源代码,我们将其命名为container.h
),然后创建数据结构。
// main.cpp
#include "container.h"
#include "myclass.h"
int main()
{
bla<MyClass> foo;
// lots of more things...
}
也许问题是你不知道如何在模块中划分你的代码。一个简单的经验法则是将每个类放在一个模块中,每个模块都有一个.h文件(接口,其中所有声明都在其中),以及.cpp文件(实现文件,大致你写的内部方法)。
希望这有帮助。