template<typename Iterator>
void put_value(Iterator pos, int n)
{
static_assert(IsOutputIterator<Iterator>);
//
// How to implement IsOutputIterator?
//
*pos = n;
}
std::iterator_traits<Iterator>::iterator_category
は役に立ちません。たとえば、vector<int>::iterator
はoutput_iterator
が明らかですが、std::iterator_traits<vector<int>::iterator>::iterator_category
はrandom_access_iterator
を返します。output_iterator
、たとえばconst_iterator
ではない可能性があります。イテレータがC++のoutput_iteratorであるかどうかをチェックする方法は?
イテレータがC++のoutput_iteratorであるかどうかを確認する方法はありますか?
入力イテレータカテゴリ以外のイテレータは出力イテレータです。 – Eugene
ランダムアクセスイテレータは出力イテレータのすべての要件を満たします。 –
いいえ、出力イテレータが読み込みを許可していない可能性があります。あなたはそれに書き込むことができます。 –