183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
|
|
DLL, RAII для интерфеса11.06.2015, 23:52. Показов 509. Ответов 4
Метки нет Все метки)
(
Речь пойдёт, само собой, о неявно подключаемой dll для хранения классов. Решил пойти в сторону интерфейсов и фабрик классов, тут вроде всё просто, абстрактный класс с нужными методами и статик метод "Create()" в роли фабрики. Работаем с экземплярами классов через указатели, что не может радовать, ведь, создавая статик либу, я от этого пытался уйти, экземпляры некоторых классов привычно использовать по значению (константные ссылки и семантика перемещения мне в помощь). И вот задумал я засунуть интерфейсы в умные указатели, однако, за неимением явных конструкторов у первых, затея провалилась. Тогда я написал простенький RAII класс для конкретного интерфейса, хранящий указатель на экземпляр, в конструкторе вызываем функцию-фабрику (можно передавать как параметр шаблона), в деструкторе статик метод "Release(IMyClass*)", ну и оператор "->" для доступа к методам. Потестил, работает. Минус в, том что логика этого RAII класса должна быть в Header'е, хотя этого не избежать и потому, что этот должен быть шаблонный класс, ещё получается большая вложенность ресурсов, но тут можно заинлайнить методы RAII класса.
В общем имеет ли смысл использовать такой подход? Есть ли другие подходы? Всё-таки не вариант пользоваться голыми указателями, хоть new и delete явно больше не используются, на их место пришли "Create()" и "Release()".
0
|
11.06.2015, 23:52 | |
Ответы с готовыми решениями:
4
Шаблон RAII замены указателя на функцию Программирование интерфеса
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
||||||
12.06.2015, 00:00 | ||||||
не понятно что значит следующее:
1
|
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
|
|||
12.06.2015, 00:22 [ТС] | |||
![]()
0
|
19458 / 10070 / 2452
Регистрация: 30.01.2014
Сообщений: 17,751
|
|||
12.06.2015, 00:46 | |||
1
|
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
|
|
15.06.2015, 11:38 [ТС] | |
Многое прояснилось. Смартпоинты решил не засовывать в dll (в хедер), разбираться с этим надо уже в программе-клиенте. Более того, решил смотреть сразу в сторону COM.
Позвольте, задам здесь такой вопрос по использованию типа VARIANT. Работая с некоторыми компонентами (Excel.Application, например), методы возвращали этот тип данных, из которго я уже вытаскивал либо другой интерфейс, либо, например BSTR. Как подобное реализуется при создании своего компонента? "Руками" собирать "VARIANT" или возвращаем нужный нам тип (а клиент уже будет работать с вариантом)?
0
|
15.06.2015, 11:38 | |
Помогаю со студенческими работами здесь
5
Два сетевых интерфеса Проброс пакета с одного интерфеса на другой Использование String Tables в .dll(.dll.mui) (Для VB .NET)
Нужна Dll для exe msvbm70b.dll Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Реализация многопоточных сетевых серверов на Python
py-thonny 16.05.2025
Когда сталкиваешься с необходимостью писать высоконагруженные сетевые сервисы, выбор технологии имеет критическое значение. Python, со своей элегантностью и высоким уровнем абстракции, может. . .
|
C# и IoT: разработка Edge приложений с .NET и Azure IoT
UnmanagedCoder 16.05.2025
Мир меняется прямо на наших глазах, и интернет вещей (IoT) — один из главных катализаторов этих перемен. Если всего десять лет назад концепция "умных" устройств вызывала скептические улыбки, то. . .
|
Гибридные квантово-классические вычисления: Примеры оптимизации
EggHead 16.05.2025
Гибридные квантово-классические вычисления — это настоящий прорыв в подходах к решению сложнейших вычислительных задач. Представьте себе союз двух разных миров: классические компьютеры, с их. . .
|
Использование вебсокетов в приложениях Java с Netty
Javaican 16.05.2025
HTTP, краеугольный камень интернета, изначально был спроектирован для передачи гипертекста с минимальной интерактивностью. Его главный недостаток в контексте современных приложений — это. . .
|
Реализация операторов Kubernetes
Mr. Docker 16.05.2025
Концепция операторов Kubernetes зародилась в недрах компании CoreOS (позже купленной Red Hat), когда команда инженеров искала способ автоматизировать управление распределёнными базами данных в. . .
|
Отражение в C# и динамическое управление типами
stackOverflow 16.05.2025
Reflection API в . NET — это набор классов и интерфейсов в пространстве имён System. Reflection, который позволяет исследовать и манипулировать типами, методами, свойствами и другими элементами. . .
|
Настройка гиперпараметров с помощью Grid Search и Random Search в Python
AI_Generated 15.05.2025
В машинном обучении существует фундаментальное разделение между параметрами и гиперпараметрами моделей. Если параметры – это те величины, которые алгоритм "изучает" непосредственно из данных (веса. . .
|
Сериализация и десериализация данных на Python
py-thonny 15.05.2025
Сериализация — это своего рода "замораживание" объектов. Вы берёте живой, динамический объект из памяти и превращаете его в статичную строку или поток байтов. А десериализация выполняет обратный. . .
|
Чем асинхронная логика (схемотехника) лучше тактируемой, как я думаю, что помимо энергоэффективности - ещё и безопасность.
Hrethgir 14.05.2025
Помимо огромного плюса в энергоэффективности, асинхронная логика - тотальный контроль над каждым совершённым тактом, а значит - безусловная безопасность, где безконтрольно не совершится ни одного. . .
|
Многопоточные приложения на C++
bytestream 14.05.2025
C++ всегда был языком, тесно работающим с железом, и потому особеннно эффективным для многопоточного программирования. Стандарт C++11 произвёл революцию, добавив в язык нативную поддержку потоков,. . .
|