Re: type_safe
От: Кодт Россия  
Дата: 18.05.02 07:15
Оценка: 33 (3)
Здравствуйте alex_shar, Вы писали:

AS>НУЖНО реализовать ассоциотивный контейнер, такой, что он может хранить обьекты любых типов, но возвращать значение можно только зная его тип. Только по id, не зная типа получить его невозможно.


Во-первых, зачем именно такая постановка задачи?

Во-вторых, данные каких типов предполагается хранить (все — это слишком общо)
  • числа
  • указатели на числа
  • указатели на структуры, массивы (сюда же можно отнести С-строки)
  • указатели на объекты
  • указатели на ком-объекты
  • варианты
    и так далее.

    Для каждого случая есть свой механизм распознавания типа.

    Наиболее общий, хотя и геморройный способ — хранить варианты (VARIANT) и на попытку чтения проверять соответствие типа. Способ не пригоден для не-комовских объектов.

    В-третьих, как предполагается оформлять отказ?
  • подсовывать значение по умолчанию
  • возвращать код ошибки
  • бросать исключение

    В-четвертых, возможно ли, чтобы одному ключу соответствовал "букет" (несколько значений разных типов), или же один ключ — одно данное? Что происходит при повторной записи по одному ключу значения другого типа?

    В-пятых, какая конверсия типов возможна?
  • все типы различны (int != long)
  • целые типы с точностью до размера и знака (int == long != unsigned != short != char)
  • целые типы эквивалентны, вещественные эквивалентны
  • (для классов) записанный объект субкласса (наследник) эквивалентен запрашиваему суперклассу (предку)
  • (для ком-объектов) запрашивается интерфейс; если объект его имеет — удача
  • (для диспинтерфейсов) запрашивается свойство или метод

    В-шестых, можно ли для объектов безымянного типа (тип не идентифицируется средствами RTTI языка, например, перечисление, массив или структура) указывать тип "вручную"
    setValue("key", "MyStructure", new MyStruc);
    getValue("key", "MyStructure", (void**)&pMyStruc) --> true
    getValue("key", "SomethingElse", (void**)&pXXX) --> false

    (в принципе, так работает COM)

    Наконец, какой инструментарий предполагается использовать?
  • голый С
  • STL
  • MFC
  • COM
    Если вы делаете библиотеку, то какой инструментарий наиболее подходит для стыковки с другими модулями?
  • Перекуём баги на фичи!
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.