0

よし、STL の関数はわかった

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

私はコンテナーでも機能するメソッドを使用してクラスに取り組んでおり、上記の例のようにテンプレート化することもできることに気付きました。テンプレート化されていないバージョンは次のようになります。

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;
}

問題は、テンプレート化されたメソッドのパラメーターに基づいて、テンプレート化された反復子をどのように正しくインスタンス化するかということです。入力イテレータのみが必要であることに注意してください。

4

1 に答える 1

5

あなたのテストケースは不完全なので、私は私の水晶玉に相談しなければなりません。

テンプレート定義は、ヘッダーファイルにあるはずのソースコードファイルに配置しました。

参照:テンプレートをヘッダーファイルにのみ実装できるのはなぜですか?

于 2012-05-08T17:38:38.100 に答える