Здравствуйте, Dsmover, Вы писали:
D>Не люблю я такие new: в одном месте new, а delete в совсем другом. Не хочу
D>Эту прогу пишут 4 человека. Кто-то напортачит потрогав мой код, и забыв убрать там delete в другом месте. а притензии ко мне будут
Здравствуйте, Dsmover, Вы писали:
D> Я хочу передавать разные параметры, в одном случае просто число, иногда строка, иногда структура и т.д, смотря что ждет обработчик при каком событии. Сам класс (наследник от IParameter) является в принципе только хранилищем разного рода данных.
Тогда можно сосредоточиться на вариантных типах в отрыве от объектно-ориентированности (зачем нам лишние сущности?)
Если есть возможность и желание припахать буст, то см. boost::variant и boost::any
Если нужен стандартизованный интерфейс со сторонними модулями, то см. COM VARIANT и его С++ные обёртки (MSVC _variant_t, ATL::CComVariant)
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Dsmover, Вы писали:
D>> Я хочу передавать разные параметры, в одном случае просто число, иногда строка, иногда структура и т.д, смотря что ждет обработчик при каком событии. Сам класс (наследник от IParameter) является в принципе только хранилищем разного рода данных.
К>Тогда можно сосредоточиться на вариантных типах в отрыве от объектно-ориентированности (зачем нам лишние сущности?) К>Если есть возможность и желание припахать буст, то см. boost::variant и boost::any К>Если нужен стандартизованный интерфейс со сторонними модулями, то см. COM VARIANT и его С++ные обёртки (MSVC _variant_t, ATL::CComVariant)
boost нет желания тащить. я здесь не один в проекте, да и не хочется.
Какой COM и ATL, мы пишем в брутальном и волшебном мире Linux-a
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Dsmover, Вы писали:
D>> Я хочу передавать разные параметры, в одном случае просто число, иногда строка, иногда структура и т.д, смотря что ждет обработчик при каком событии. Сам класс (наследник от IParameter) является в принципе только хранилищем разного рода данных.
К>Тогда можно сосредоточиться на вариантных типах в отрыве от объектно-ориентированности (зачем нам лишние сущности?) К>Если есть возможность и желание припахать буст, то см. boost::variant и boost::any К>Если нужен стандартизованный интерфейс со сторонними модулями, то см. COM VARIANT и его С++ные обёртки (MSVC _variant_t, ATL::CComVariant)
Да и Вариант это слабая тема. Она поддерживает все существующие типы (смотрел реализацию QVariant в сырцах QT). А мне надо "запихивать" разные структуры, классы, массивы объектов...
Здравствуйте, Dsmover, Вы писали:
D>Да и Вариант это слабая тема. Она поддерживает все существующие типы (смотрел реализацию QVariant в сырцах QT). А мне надо "запихивать" разные структуры, классы, массивы объектов...
Здравствуйте, Finder_b, Вы писали:
F_>Здравствуйте, Dsmover, Вы писали:
D>>Да и Вариант это слабая тема. Она поддерживает все существующие типы (смотрел реализацию QVariant в сырцах QT). А мне надо "запихивать" разные структуры, классы, массивы объектов...
F_>Может boost::any подойдет?
Здравствуйте, Dsmover, Вы писали:
F_>>Может boost::any подойдет?
D>не хочу и не имею права тащить буст
скопируй (переименовав буковки)
там простая реализация
Здравствуйте, Dsmover, Вы писали:
D>Да и Вариант это слабая тема. Она поддерживает все существующие типы (смотрел реализацию QVariant в сырцах QT). А мне надо "запихивать" разные структуры, классы, массивы объектов...
Чую, что здесь какая-то архитектурная проблема...
Вообще, по-хорошему: либо функция твёрдо знает, с каким типом работает, и тогда незачем ветвиться; либо не знает и знать не желает — просто передаёт данные в коробке как есть.
Исключений не так уж много: это маршаллинг, сериализация, распечатка.
Здравствуйте, ankf, Вы писали:
A>Кстати а зачем собственно клонировать сам объект. По идее нам нужно клонировать указатель. A>Объект Parameter* он размещен же не в стеке, а в куче и этот указатель валиден для всех потоков в рамках процесса.
размещение объекта ТОЛЬКО в куче надо еще гарантировать специальным образом...