Т8
void*
@nlinkerSize: a a a
Т8
void*
@nlinkerТ8
class IteratorBase {
public:
using Out; // <<< to be defined
virtual ~IteratorBase() { }
virtual Out next() = 0;
virtual unsigned long sizeHint() const = 0;
};
template<class Container>
class OwnIterator : public IteratorBase {
public:
using IterType = typename std::remove_const<typename Container::const_iterator>::type;
using Out = typename std::iterator_traits<typename Container::const_iterator>::value_type;
private:
Container container;
IterType iter;
public:
OwnIterator(Container c) : container(std::move(c)), iter(container.begin()) {}
Out next() { ... return *iter; }
...
// and so on
...
};NL
Т8
O
auto IteratorBase::next()
-> /* ??? */next можем?NL
Т8
static_cast<void*>() фигачить, либо напрямую через reinterpret_cast<>()Т8
Т8
std::any хотя б рантайм чекинг предоставитТ8
O
OutBase, у которого описан требуемый интерфейсO
Т8
NL
IteratorBase.Т8
std::any и идти путём C# 1. void* стирает инфу, надо либо в compile time знать, где какой тип, либо тащить как-то доп. инфуТ8
RP
RP
RP
NL