Существует класс A, содержащий два перегруженных метода getItems ();
typedef std::vector <int> TItems;
template <typename T>
class A
{
private:
T a;
TItems items;
public:
A(){}
A ( const T a_, const TItems & items_) : a(a_) , items (items_) {}
bool operator () ( const A <T> &aa ) {return a < aa.a;}
TItems const & getItems() const {return items}
TItems & getItems() {return items}
};
и набор объектов A
template <typename T>
struct TSet {typedef std::set <A <T> > Type;};
Я хотел бы вернуть константную ссылку / ссылку наTItems, но работает только второй метод
int main ()
{
TSet <double> ::Type t;
TSet <double> ::Type::iterator it = t.begin();
t.insert (A <double>( 5, TItems(10,10)));
const TItems *items = &(it->getItems()); //OK
TItems *items = &(it->getItems()); //Error
}
Error 1 error C2440: 'initializing' : cannot convert from 'const TItems *' to 'TItems *
Является ли причиной того, что непостоянные ссылки позволяют изменять объекты A, вызывая потенциальную перестановку в наборе?Но элементы набора расположены не по A.items, а по.
Есть ли способ, как изменить A.items с помощью непостоянной ссылки?