3

C++ で、クラス定義の外でクラス関数を作成するたびにテンプレート名を入力する必要を回避する方法はありますか?

たとえば、クラス関数を定義したい場合、template <class T>すべての関数の前に type を入力する必要がありますか? クラスがテンプレートを使用することを既に指定している場合、それは多くの不必要な作業のように思えます。

例えば...

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

template <class T>LinkedList がジェネリックを使用することを既に指定しているのに、なぜ入力しなければならないのですか? 私は Java でジェネリックがどのように機能するかに慣れているので、これは初めてのことです。

4

1 に答える 1

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');
}
于 2013-07-20T13:32:01.497 に答える