У меня есть то, что по сути является классом, содержащим std :: map, значениями которого являются shared_ptrs, обертывающий контейнер, который содержит разные типы. Код скелета следующий:
// Just a basic example class
class MyClass {
public:
explicit MyClass(int i) : mI(i) {}
bool operator==(const MyClass& rhs) { return mI == rhs.mI; }
private:
int mI;
};
// A class into which key value pairs can be added where the value
// can be of a different type.
class MultipleTypeMap {
public:
template <typename T>
void AddObject(const std::string& key, const T object) {
auto ptr = make_shared<B<MyClass>>(std::move(object));
mSharedPtrMap.insert(pair<string, shared_ptr<A>>("key", ptr));
}
// ...
private:
class A {
public:
virtual ~A() = default;
};
template<typename T>
class B : public A {
public:
explicit B(const T& t) : item(t) {}
const T item;
};
map<string, shared_ptr<A>> mSharedPtrMap;
};
int main() {
MyClass m(1);
MultipleTypeMap multiMap;
multiMap.AddObject("test", m);
MyClass n(1);
MultipleTypeMap multiMap2;
multiMap2.AddObject("test", n);
if (multiMap == multiMap2) {
cout << "Equal" << endl;
}
return 0;
}
Как должен быть написан универсальный оператор == для MultipleTypeMap, чтобы он сравнивал содержимое mSharedPtrMap, проверяя, чтобы объекты lhs и rhs имели одинаковое количество ключей, одинаковые ключи и одни и те же объекты, а это означает, что == оператор ключей / объектов оценивается как true?