0x01 实现模板类
通常在C/C++中实现一个类,都是将声明放在.h文件中,将定义(实现)放在.c或者.cpp文件中,例如:
通常示例多文件编译
myClass.h
cpp
1 |
|
myClass.cpp
c++
1 |
|
myClass.main.cpp
c++
1 |
|
然后编译的时候直接运行makefile或者执行命令:
bash
1 | g++ -c myClass.cpp |
就可以运行了。这在没有设计模板类的时候一切都会很顺利,但是只要涉及到了模板类就…
模板类多文件遇到的问题
就拿一个循环队列来举例子吧。
cycleQueue.hpp
c++
1 |
|
cycleQueue.cpp
c++
1 |
|
cycleQueue.main.cpp
c++
1 |
|
按照常理,正常使用g++编译即可生成main可执行文件,但是在执行最后一步链接的时候会出现问题。
bash
1 | $ g++ -c cycleQueue.cpp |
可以看到,单独编译实现代码的时候是可以通过的,但是在两个文件链接起来的时候出现了问题。经过查找资料,貌似是因为实现文件中实现的是cycleQueue<T>
这个类型,但是main中使用了cycleQueue<int>
这个类型,所以编译器找不到这个类型的定义。
想了想,这好办啊,只要把实现的定义也加进去就好了呀。
于是乎,cycleQueue.hpp就成了:
c++
1 |
|
而为了解决include重复问题,cycleQueue.cpp也变成了:
c++
1 |
|
于是乎,搭配makefile就可以快速实现编译了
makefile
1 | cycleQueue: cycleQueue.o cycleQueue.main.o |
bash
1 | $ ls -la |
一顿操作猛如虎23333