Ich will std::map wrappen um später events zu feuern wenn z.B. Items eigenfügt oder geändert werden. Für std::vector und std::list habe ich das erfolgreich hinbekommen. Bei std::map macht der [] operator Probleme.
Hier der Code
Code: Alles auswählen
#pragma once
#include <map>
template <typename KEY, typename VALUE>
class MapBase
{
private:
std::map<KEY, VALUE> *_items;
public:
typedef typename std::map<KEY, VALUE>::iterator Iterator;
typedef typename std::map<KEY, VALUE>::reverse_iterator ReverseIterator;
MapBase()
{
_items = new std::map<KEY, VALUE>;
}
~MapBase()
{
this->Clear();
}
void Clear()
{
_items->clear();
}
void Insert(const KEY& key, const VALUE& value)
{
_items->insert(std::pair<KEY, VALUE>(key, value));
}
Iterator Begin()
{
return _items->begin();
}
Iterator End()
{
return _items->end();
}
VALUE& operator[] (KEY& key)
{
return (*_items)[key];
}
};
Code: Alles auswählen
main.cpp
1>c:\_daten\temp\mwisim\main.cpp(40): error C2679: Binärer Operator '[': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'int' akzeptiert (oder keine geeignete Konvertierung möglich)
1> c:\_daten\temp\mwisim\core\mapbase.h(45): kann 'double &MapBase<KEY,VALUE>::operator [](KEY &)' sein
1> with
1> [
1> KEY=int,
1> VALUE=double
1> ]
1> bei Anpassung der Argumentliste '(MapBase<KEY,VALUE>, int)'
1> with
1> [
1> KEY=int,
1> VALUE=double
1> ]
1>c:\_daten\temp\mwisim\main.cpp(41): error C2679: Binärer Operator '[': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'int' akzeptiert (oder keine geeignete Konvertierung möglich)
1> c:\_daten\temp\mwisim\core\mapbase.h(45): kann 'double &MapBase<KEY,VALUE>::operator [](KEY &)' sein
1> with
1> [
1> KEY=int,
1> VALUE=double
1> ]
1> bei Anpassung der Argumentliste '(MapBase<KEY,VALUE>, int)'
1> with
1> [
1> KEY=int,
1> VALUE=double
1> ]
Code: Alles auswählen
MapBase<int, double> m;
m.Insert(1, 2.345);
m.Insert(2, 5.43);
m.Insert(3, 1.2456);
double dd = m[2];
// oder halt
m[2] = 3.333;