Boost.Range iterator_range und sub_range aus const-Methode zurückgeben.



  • Moin,

    ich hab folgendes:

    class A {
    public:
        typedef boost::iterator_range<vector<int>::iterator > range;
        range ints() const { return range(mInts.begin(), mInts.end()); } // geht nicht
        range ints() { return range(mInts.begin(), mInts.end()); } // geht
    private:
        vector<int> mInts;
    };
    

    Ich möchte von einem Objekt das const ist, eine range von Objekten zurückgeben.
    Ich habe es auch mit sub_range probiert. Jedesmal sagt er mir, dass Typen
    nicht kompatibel sind.

    Ist sub_range nicht gerade dafür da, const zu ermöglichen? Wie mache ich das?
    Ich würd zur Not auch eine Range mit iterator statt const_iterator zurückgeben,
    die Methode selbst sollt nur const sein.

    Der Fehler:

    /usr/include/boost/range/iterator_range.hpp:75: error: no matching function for call to ‘__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >::__normal_iterator(__gnu_cxx::__normal_iterator<const int*, std::vector<int, std::allocator<int> > >)’

    Gruß



  • Du musst einen vector::const_iterator verwenden 😉


Log in to reply