class X {
public:
typedef std::list Container;
// (1)
const Container& GetElements() const;
// (2)
Container::iterator Element
If you can use Boost, there is a library for you: http://www.boost.org/doc/libs/1_47_0/libs/iterator/doc/index.html Specifically look at iterator_facade and iterator_adapter
Here is an example of what to do - It provides an std::vector holder, with STL compatible iterators. You can extend it by adding other methods, like operator[], size(), push_back() etc.
template class VectorHolder { public: typedef T value_type;
public: VectorHolder() : m_values() { }
public: typedef typename std::vector::iterator vector_iterator; typedef typename std::vector::const_iterator vector_const_iterator;
class iterator : public boost::iterator_adaptor
{
public:
iterator()
: iterator::iterator_adaptor_()
{
}
iterator(const vector_iterator& it)
: iterator::iterator_adaptor_(it)
{
}
private:
friend class boost::iterator_core_access;
};
class const_iterator : public boost::iterator_adaptor
{
public:
const_iterator()
: const_iterator::iterator_adaptor_()
{
}
const_iterator(const vector_const_iterator& it)
: const_iterator::iterator_adaptor_(it)
{
}
const_iterator(const iterator& it)
: const_iterator::iterator_adaptor_(it.base())
{
}
private:
friend class boost::iterator_core_access;
};
iterator begin()
{
return iterator(m_values.begin());
}
iterator end()
{
return iterator(m_values.end());
}
const_iterator begin() const
{
return const_iterator(m_values.begin());
}
const_iterator end() const
{
return const_iterator(m_values.end());
}protected:
std::vector m_values;};