Re[2]: type_safe
От: Аноним  
Дата: 18.05.02 07:31
Оценка:
Здравствуйте Кодт, Вы писали:

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”];
  •  
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.