-1

私はこの機能を持っています:

std::vector<std::pair<std::vector<int>::iterator, std::vector<int>::iterator> > 
split(    const std::vector<int>& vector,size_t slices){

...

}

それは非常に冗長であり、おそらく将来的に他の種類のベクトルを分割する必要があるため、テンプレートベースにしたいのですが、この試行は失敗しました:

 template<typename T> 
  std::vector<std::pair< std::vector<T>::iterator, std::vector<T>::iterator> >
  split( const std::vector<T>& vector, size_t slices) 

    ...

 }

私が見ることができる 2 つの問題があります。2 - テンプレートの削減については、まだよく理解できていません。

説明をいただければ幸いです。

4

3 に答える 3

1

1 - ベクトル、マップ、またはリストを使用できません [...]

一般的にすべての containerstd::vectorを処理する場合は、最初からテンプレートを使用しないでください (また、関数の引数に名前を付けないでくださいvector)。

template<typename C>
std::vector<std::pair<typename C::iterator, typename C::iterator>>
split(C const& cont, size_t slices)
{
    ...
}

typenameまた、修飾された従属型名を指定するときに必要なキーワードの使用にも注意してください。

于 2013-02-25T16:42:35.810 に答える
1
template<typename T> 
  std::vector<std::pair< typename T::iterator, typename T::iterator> >
  split( const T& vector, size_t slices) 

    ...

 }

がありませtypenameん。コンテナのタイプを置き換えることができます。

于 2013-02-25T16:43:00.770 に答える
0

あなたが行方不明ですtypename

template<typename T>
std::vector<
    std::pair<
        typename std::vector<T>::iterator,
        typename std::vector<T>::iterator
    >
>
split( const std::vector<T>& vector, size_t slices)
{ /* ... */ }

「template」および「typename」キーワードをどこに、なぜ入力する必要があるのですか? を参照してください。の詳細については、 を参照してくださいtypename

于 2013-02-25T16:42:11.260 に答える