orのような特定の stl コンテナの入力引数としてC++11
any を受け入れる関数で作成することは可能ですか?iterator
vector
list
のようなものを書きたい
void f(iterator<int> i){
for (auto el : i)
cout << el;
}
int main(){
vector<int> v;
list<int> l;
...
f(v);
f(l);
}
出来ますか?
for (auto i: cont)
関数で反復子を受け入れる場合は、構文を使用できません。実際、この新しい範囲ベースの for 構文は、反復子ではなくコンテナーを必要とします。
次に、コンテナーを渡して、関数を簡単に関数テンプレートにすることができます。
template <class CONT>
void f(CONT &cont){
for (auto el : cont)
cout << el;
}
イテレータを渡し続けたい場合は、テンプレートの方法も使用する必要がありますが、引数として 2 つのイテレータを渡す必要があります。1 つは最初のもの、もう 1 つは最後 (のようにalgorithm
) です。
template <class IT>
void f(IT first, IT last) {
for ( ; first!=last ; ++first)
cout << first;
}
いいえ。任意のイテレータをパラメーターとして受け入れる関数テンプレートを作成できますが、関数は作成できません。
イテレータの型消去を行うクラスがある場合は、それをパラメータとして使用できます。iterator type erase の記事とコードは次のとおりです。
どこかに boost::any_iterator があります。しかし、標準はそれを提供していません。