2016-10-13 3 views
0

テンプレート型の2つのイテレータを使用する関数を作成しようとしています。この関数は、イテレータの間隔に含まれるすべての奇数の値を返します。私は、2番目のtypename T2を作成しようとし、それを "??"コードスニペットでC++のテンプレート関数itteratorをテンプレートとし、イテレータの型を持つベクトルを返します

 template <typename T1> 
     std::vector<??> odd(T1 start,T1 end){ 
      std::vector<??> result; 
      while(start++!=end){ 
      if(*result % 2 == 1){ 
       ans.push_back(*start); 
      } 
      } 
      return result; 
     } 
     int main(){ 
      int a[6] = {1,2,3,4,5,6}; 
      udda(std::begin(a),std::end(a)); 
     } 

私は、イテレータと同じクラスのベクトルを作成して返したいとします。これは可能ですか?

答えて

0

あなたはdecltypetrailing return typesを使用することができます。

template <typename T1> 
auto odd(T1 start, T1 end) 
    -> std::vector<typename std::remove_reference<decltype(*start)>::type> 
{ 
    /* ... */ 
} 

wandbox example

+0

私はdecltypeとイテレータをデリファレンスを使用しようとすると、私は、コンパイルエラーを取得しますか? –

+0

@ JakobSvenningsson:申し訳ありませんが、remove_reference_tも必要です。 –

+0

答えを修正し、ワンドボックスの例を追加しました。 –

関連する問題