私はstd::array<SomeType, N>
があると仮定し、イテレータを使用する関数をstd::array
のオブジェクトで動作させたいと考えていますが、コンテナについては知らずにstd::array
です。イテレータを使ってオブジェクト操作を実行する関数
int main() {
std::array<SomeType, 10> a;
action<std::array<SomeType, 10>::iterator>(a.begin(), a.end());
}
しかし:この関数を呼び出すとすることにより可能である
template<typename Iterator>
void action(Iterator &beg, Iterator &end) {
for (; beg != end; ++beg)
beg->doSomething();
}
:
SomeTypeは、パブリックメンバ関数のdoSomething()
は、例えば関数があるかもしれないを持つクラスでありますこれをやり遂げる方法があるのだろうか?特に、各クラスにテンプレートを使用できるためです。コンテナがstd::array
であることを関数に知らせずに、関数をSomeType
に制限する方法はありますか?
書かれたコードはコンパイルされません。少なくとも、それは正しい形式のC++ではありません。 [デモ](http://melpon.org/wandbox/permlink/tw8f7mpNxZTZel9X) –