2016-09-26 4 views
2

私は、この関数シグニチャ奇妙なテンプレートの仕様は

template<typename T> 
template<typename FI> 
void vector<T>::_M_assign_aux (FI first, FI last,std::forward_iterator_tag) 
{} 

に実行したことは、これに等しいですか?

template<typename T, typename FI> 
void vector<T>::_M_assign_aux (FI first, FI last,std::forward_iterator_tag) 
{} 

個別に書き込む理由はありますか?

答えて

4

_M_assign_auxvector<T>の方法のように見えるので、これは、このようなコードを開始している必要があります。

template<typename T> 
class vector 
{ 
    // ... 

    template<typename FI> 
    void _M_assign_aux(FI first, FI last,std::forward_iterator_tag); 

    // ... 
}; 

は、クラス宣言を見ると、説明がより「見える」です:あなたは、クラスに1つのテンプレート宣言を持っています、およびその方法のための1つ。

template<typename T> // template declaration for vector 
template<typename FI> // template declaration for _M_assign_aux 
void vector<T>::_M_assign_aux(FI first, FI last,std::forward_iterator_tag) 
{ 
} 
+0

。 g ++に関するもう1つの質問です。 stl_vector.hとvector.tccの違いは何ですか? –

+0

@JiříLechner.tccは、多くの場合、テンプレートクラスの実装の拡張として使用されます。 –

2

実際には、これはクラステンプレートのメソッドテンプレートです。したがって、最初のtemplate <typename T>vector<T>(クラステンプレート)に適用されます。次にtemplate <typename FI>がメソッド_M_assign_aux()に適用されます。

あなたはそれが次のようになりますユニークな場所に全部を収集したい場合:ええ、それは実際にvector.tccからである

template <typename T> 
class vector { 
    // Some stuff 
    template <typename FI> 
    void _M_assign_aux(FI first, FI last, std::forward_iterator_tag) { 
     // Some impl 
    } 
}; 
関連する問題