2011-02-09 5 views
1

次のコードはモジュール内にあります。cpp内のテンプレート

コントローラは、クラスの名前です。 allocate_routeは、そのメンバー関数です。

template<UI num_ip> 
void Controller<num_ip>::allocate_route() 
{ 
} 

UIは符号なし整数であるように、それが指定されたメンバ関数を定義する際。 num_ipはどこにも定義されていません。彼はまた、コードのどこにでもnum_ipを使用していません。彼はこの声明によってコンパイラに何を伝えますか?ここでテンプレートの使用を理解することはできません。 Watはこのコードをしますか?

答えて

3

このコードでは、テンプレートクラスControllerに定義されている関数allocate_routeが実装されています。

テンプレートクラスを作成するとき、あなたは関数を実装するには2つの方法があります。

template <int a> 
class A 
{ 
    void x() { ... } 
}; 

または

template <int a> 
class A 
{ 
    void x(); 
}; 

template <int a> 
void A<a>::x() 
{ 
} 
+0

ありがとうございます。 @alessandro – CHID

+0

@CHID:質問に答えてください:-) – Loghorn

+0

はい。忘れました:) – CHID

1

をたぶん彼は、このメソッドの外側が、それでもControllerクラス内のどこかにnum_ipを使用している(多分別方法)。

テンプレート内でメソッドを定義する場合は、メソッドでテンプレートパラメータを使用しない場合でも、template<...>を追加する必要があります。だからこそこのようなことをする方がいいかもしれません:

class Controller_base 
{ 
    void allocate_route(){ 
    } 
}; 

template<UI num_ip> 
class Controller: public Controller_base 
{ 
} 

void Controller_base::allocate_route() 
{ 
} 
+0

ありがとうPawel – CHID

関連する問題