如何显示类模板特化C/C++ code#include iostream//声明部分template class Typeclass Queuetemplate
如何显示类模板特化
- C/C++ code
#include <iostream>// 声明部分template <class Type>class Queue;template <class Type>class QueueItem;template<class Type> std::ostream& operator<<(std::ostream &os,Queue<Type>&);template<class Type>std::ostream& operator<<(std::ostream &,QueueItem<Type>&);////////////////////////////////////////////////////////////template <class Type>class Queue{ friend std::ostream& operator<< <Type>(std::ostream&, Queue<Type>&);public: Queue():front(0),back(0){} ~Queue(); Type remove(); void add(const Type&); bool is_empty()const{ return 0==front; }private: QueueItem<Type> *front; QueueItem<Type> *back;};- C/C++ code
typedef char *PCC;template <>void Queue<PCC>::add(const PCC &tem);//特化生明
我把特化定义放到头文件或程序文件中都会编译出错,是因为编译器的原因还是我没写对?下面是我的特化定义。
- C/C++ code
template <>void Queue<PCC>::add(const PCC &tem){ std::cout << "显示类模板特化";}出错信息:
1>main.obj : error LNK2005: "public: void __thiscall Queue<char *>::add(char * const &)" (?add@?$Queue@PAD@@QAEXABQAD@Z) already defined in model1.obj
[解决办法]
typedef char *PCC;
//template <>void Queue<PCC>::add(const PCC &tem);//特化生明
感觉上述第2句是多余的呢
[解决办法]
[解决办法]
都放在头文件中编译,如果分开放的话编译器中模版的分离模式不能够很好地被支持,建议还是放在头文件中就行了,就采取包含模式编译。
