C++ 17はstd::iterator
を非難するので、私は自分自身を実装する必要があります。それは、いくつかのtypedefを持つ空のstructであることが分かります。std :: iteratorを実装する
template <class Category, class Type, class Diff = ptrdiff_t,
class Pointer = Type*, class Reference = Type&>
struct iterator {
typedef Category iterator_catergory;
typedef Type value_type;
typedef Diff difference_type;
typedef Pointer pointer;
typedef Reference reference;
};
struct dummy_iter : iterator<std::output_iterator_tag, int> {}
これは動作します:
printf("%d\n", std::is_same<typename dummy_iter::pointer, int*>::value);
しかし、それはstd::iterator_traits
では動作しません:あなたはタイプミスを持って
printf("%d\n", std::is_same<typename std::iterator_traits<dummy_iter>::pointer, int*>::value);
error: 'pointer' in 'struct std::iterator_traits<dummy_iter>' does not name a type
自分で実装する必要はありません。 'std :: iterator'はまだ標準であり、それを提供するためにはすべての標準ライブラリ実装が必要です。非推奨とは、今後**何かが削除される可能性があるという警告です。それはそれを削除しません、そして、それが削除されることを意味しません。 Cのヘッダーは1998年以後非難されており、まだ生きていて、蹴って広く使われています。 –