必须每次为通用函数键入模板吗?

时间:2013-05-17 02:44:30

标签: c++ templates generics

在C ++中,有没有办法避免每次在类定义之外编写类函数时都必须输入模板名称?

例如,如果我想定义一个类函数,是否必须在每个函数之前键入类型template <class T>?如果我已经指定该类使用模板,那似乎是很多不必要的工作。

例如......

template <class T>
void LinkedList<T>::addFirst(T data) {
//my code...
}

为什么我已经指定LinkedList使用泛型时必须输入template <class T>?我已经习惯了泛型如何在Java中工作,所以这对我来说是新的。

1 个答案:

答案 0 :(得分:2)

//release 1:
template <class T>
struct LinkedList
{
    void addFirst(T data);
};

//release 2: partial specialization 
template <class T>
struct LinkedList<T*>
{
    void addFirst(T data);
};

//release 1: 
template <class T>
void LinkedList<T>::addFirst(T data) {}

//release 2
template <class T>
void LinkedList<T*>::addFirst(T data) {}

//complier could not tell which release
//void LinkedList::addFirst(T data){}

void main(){

    LinkedList<char> lc;
    lc.addFirst('c');

    LinkedList<char*> li;
    li.addFirst('c');
}