現在、ランダムアクセス反復子で API 要件を満たすことができるクラスがあります。ただし、実装が変更され、前方イテレータしか提供できない状況が想定できます。
したがって、呼び出し元がランダム アクセス機能を使用することを制限したいと思います。独自の実装 (たとえば、restricted_bar_iterator) を作成できることはわかっていますが、もっと単純な (つまり、コーディングが少なくて済む) ものはないかと考えていました。
class BAR { ... };
class FOO {
public:
// Bad...clients may expect 'bar_iterator' to be random access...
typedef std::vector<BAR>::iterator bar_iterator;
bar_iterator begin_bar() const;
bar_iterator end_bar() const;
// Possible solution here!
class restricted_bar_iterator :
public std::iterator< std::forward_iterator_tag, BAR > { ... };
};
void baz()
{
FOO foo;
bar_iterator it = foo.begin_bar() + 5; // want a compile time error here!
}