Если у Вас есть байт [], необходимо быть в состоянии использовать класс BinaryReader и установленные значения на NewStuff с помощью доступных методов ReadX.
Ваш queue_inserter
должен быть производным от std :: iterator
, чтобы все определения типов, такие как value_type
, были правильно определены поскольку они используются в алгоритмах STL. Это определение работает:
template< typename T, typename U >
class queue_inserter : public std::iterator<std::output_iterator_tag, T>{
queue<T, U> &qu;
public:
queue_inserter(queue<T,U> &q) : qu(q) { }
queue_inserter<T,U> operator ++ (int) { return *this; }
queue_inserter<T,U> operator ++ () { return *this; }
queue_inserter<T,U> operator * () { return *this; }
void operator = (const T &val) { qu.push(val); }
};
Получите его из std :: iterator. Если вам интересно, у доктора Добба есть статья о пользовательских контейнерах и итераторах.
Ваш итератор не соответствует требованию «присваиваемого» типа, который является требованием для итератора вывода, поскольку он содержит ссылку, а присваиваемые типы должны гарантировать, что после t = u
, что t
эквивалентно u
.
Вы можете предоставить подходящую специализацию для iterator_traits
для своего итератора либо путем получения специализации std :: iterator
или указав его явно.
namespace std
{
template<> struct iterator_traits<MyIterator>
{
typedef std::output_iterator_tag iterator_category;
typedef void value_type;
typedef void difference_type;
};
}