2012-05-08 2 views
0

よしで、クラスのテンプレートメソッドを作成するので、私たちは、私はまた、コンテナ上で動作する方法でクラスに取り組んでいる、と私は」はSTLスタイル

std::fill(boolContainer.begin(), boolContainer.end(), false); 

のようなSTLの関数を知っています私はちょうど同様に非テンプレートバージョン上記の例のようにそれをテンプレートかもしれないことに気づきましすることは、このようなものです:

class SomeClass { 
public: 
    // ... 
    int containerMethod(std::vector<int> &v); 
    // ... 
private: 
    // ... 
}; 

そして私はにそれを変更することを目指しています:

class SomeClass { 
public: 
    // ... 
    template <class InputIterator> 
    int containerMethod(const InputIterator &begin, const InputIterator &end); 
    // ... 
private: 
    // ... 
}; 

しかし、私は実装の詳細を働いてトラブルを抱えている:

template <class Iter> int SomeClass::containerMethod 
(const Iter &begin, const Iter&end) { 
    // Here I need to instantiate an iterator for the container. 
    Iter iter; 
    for (iter = begin; iter != end; ++iter) { 
     // This does not seem to work. 
    } 
    return 0; 
} 

そこで問題は、メソッドのテンプレートパラメータに基づいて、1が正しくテンプレートイテレータをインスタンス化しない方法ですか?私は入力イテレータしか必要ないことに注意してください。

+2

どのように動作しないのですか?コンパイラエラー、クラッシュ、その他何か? – jrok

+0

[私のための作品](http://ideone.com/NSL6T)。 –

+3

標準ライブラリでは、イテレータは通常非常に軽量なオブジェクトであるため、イテレータを渡すのが一般的です(この例では 'begin'で行うように)。 –

答えて

5

あなたのテストケースは不完全なので、私はクリスタルボールに相談しなければなりません。

テンプレート定義がソースコードファイル内に配置されています(ヘッダーファイル内にある必要があります)。

参照:Why can templates only be implemented in the header file?

+0

さて、今私は愚かだと感じる...それは実際に問題だった。ありがとう。 – rwols

+0

あなたのようなクリスタルボールはどこにありますか?最近は非常に正確です。 – chris