Здравствуйте Кодт, Вы писали:
AS>>НУЖНО реализовать ассоциотивный контейнер, такой, что он может хранить обьекты любых типов, но возвращать значение можно только зная его тип. Только по id, не зная типа получить его невозможно.
К>Во-первых, зачем именно такая постановка задачи? приблизительно такая задача была поставлена свыше.
К>Во-вторых, данные каких типов предполагается хранить
все.
К>В-третьих, как предполагается оформлять отказ? К>подсовывать значение по умолчанию К>возвращать код ошибки К>бросать исключение
Любым способом.
К>В-четвертых, возможно ли, чтобы одному ключу соответствовал "букет" (несколько значений разных типов), или же один ключ — одно данное? Что происходит при повторной записи по одному ключу значения другого типа?
не важно.
К>В-пятых, какая конверсия типов возможна? К>целые типы эквивалентны, вещественные эквивалентны
например. К>(для классов) записанный объект субкласса (наследник) эквивалентен запрашиваему суперклассу (предку)
да.
К>В-шестых, можно ли для объектов безымянного типа (тип не идентифицируется средствами RTTI языка, например, перечисление, массив или структура) указывать тип "вручную"
думаю да.
К>Наконец, какой инструментарий предполагается использовать? К>STL
STL К>Если вы делаете библиотеку, то какой инструментарий наиболее подходит для стыковки с другими модулями?
Полный вариант задания таков:
Реализовать контейнерный класс, обладающий следующими свойствами
1. Класс представляет собой ассоциативный контейнер, способный хранить объекты произвольных типов, используя строки или другой тип идентификатора в качестве ключей.
2. В одном контейнере могут храниться объекты разных типов. При этом доступ к объектам – type-safe, то есть объект класса A можно получить только как объект класса A. Получение объекта по имени(id), не зная его типа невозможно.
...
5. Элегантный интерфейс, такого образца:
Container C1, C2;
int i = 5;
A a;
B b;
C1[“Int”] = i;
C1[“Obj1”] = a;
C1[“Obj2”] = b;
C1[“Ptr”] = &a;
C2[“Copy”] = C1[“Obj1”];
A* anotherA = C1[“Ptr”];
B b2 = C1[“Obj2”];