首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么显示类模板特化

2012-06-15 
如何显示类模板特化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句是多余的呢



[解决办法]
探讨
C/C++ code

#include <iostream>

template <class T>
class TEST
{
public:
TEST()
{}
void func();
private:
T val;
};

template<> void TEST<int>::func()
{
std::cout<<……

[解决办法]
都放在头文件中编译,如果分开放的话编译器中模版的分离模式不能够很好地被支持,建议还是放在头文件中就行了,就采取包含模式编译。

热点排行