183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515

DLL, RAII для интерфеса

11.06.2015, 23:52. Показов 509. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Речь пойдёт, само собой, о неявно подключаемой dll для хранения классов. Решил пойти в сторону интерфейсов и фабрик классов, тут вроде всё просто, абстрактный класс с нужными методами и статик метод "Create()" в роли фабрики. Работаем с экземплярами классов через указатели, что не может радовать, ведь, создавая статик либу, я от этого пытался уйти, экземпляры некоторых классов привычно использовать по значению (константные ссылки и семантика перемещения мне в помощь). И вот задумал я засунуть интерфейсы в умные указатели, однако, за неимением явных конструкторов у первых, затея провалилась. Тогда я написал простенький RAII класс для конкретного интерфейса, хранящий указатель на экземпляр, в конструкторе вызываем функцию-фабрику (можно передавать как параметр шаблона), в деструкторе статик метод "Release(IMyClass*)", ну и оператор "->" для доступа к методам. Потестил, работает. Минус в, том что логика этого RAII класса должна быть в Header'е, хотя этого не избежать и потому, что этот должен быть шаблонный класс, ещё получается большая вложенность ресурсов, но тут можно заинлайнить методы RAII класса.
В общем имеет ли смысл использовать такой подход? Есть ли другие подходы? Всё-таки не вариант пользоваться голыми указателями, хоть new и delete явно больше не используются, на их место пришли "Create()" и "Release()".
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.06.2015, 23:52
Ответы с готовыми решениями:

Шаблон RAII замены указателя на функцию
шаблон raii замены указателя на фукнцию допустим имеется набор указателей на функции разных типов и существует потребность временно,...

Программирование интерфеса
Народ подскажите пожалуйста! Хочу начать изучения программирования пользовательского интерфейса, и вот сразу возник вопрос, что лучше...

RAII: внутри функции и можно ли в ней заменить new?
По наводке Убежденный стал разбираться с RAII, но по мере чтения инфы по сабжу возникают вопросы. Например, как создавать RAII для...

4
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
12.06.2015, 00:00
не понятно что значит следующее:
C++
1
 И вот задумал я засунуть интерфейсы в умные указатели, однако, за неимением явных конструкторов у первых, затея провалилась.
пробовали ли юзать фичу кастомных делитеров для стандартных смартпоинтеров?
1
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
12.06.2015, 00:22  [ТС]
Цитата Сообщение от Perfilov Посмотреть сообщение
не понятно что значит следующее:
На сколько мне известно, конструктор смартпоинта (например shared_ptr<IMyClass>) захочет вызвать конструктор IMyClass(), что ничего не даст.
Цитата Сообщение от Perfilov Посмотреть сообщение
пробовали ли юзать фичу кастомных делитеров для стандартных смартпоинтеров?
Слабо я, видать, знаком со смартпоинтами... Наверняка ему и функцию-фабрику можно передать
0
19458 / 10070 / 2452
Регистрация: 30.01.2014
Сообщений: 17,751
12.06.2015, 00:46
Цитата Сообщение от Operok Посмотреть сообщение
захочет вызвать конструктор IMyClass()
Создание объекта не на его совести. Так что не захочет.

Цитата Сообщение от Operok Посмотреть сообщение
В общем имеет ли смысл использовать такой подход?
Недавно только демонстрировал. std::unique_ptr - это и есть один из стандартных смартпойнтеров. Указание кастомного делитера - присутсвует.
1
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
15.06.2015, 11:38  [ТС]
Многое прояснилось. Смартпоинты решил не засовывать в dll (в хедер), разбираться с этим надо уже в программе-клиенте. Более того, решил смотреть сразу в сторону COM.
Позвольте, задам здесь такой вопрос по использованию типа VARIANT. Работая с некоторыми компонентами (Excel.Application, например), методы возвращали этот тип данных, из которго я уже вытаскивал либо другой интерфейс, либо, например BSTR. Как подобное реализуется при создании своего компонента? "Руками" собирать "VARIANT" или возвращаем нужный нам тип (а клиент уже будет работать с вариантом)?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.06.2015, 11:38
Помогаю со студенческими работами здесь

Два сетевых интерфеса
Всем привет! На ПК настроены 2 сетевых интерфейса eth0 и eth11 на одну подсеть. Настроил маршрутизацию, чтобы пакеты приходили на нужный...

Проброс пакета с одного интерфеса на другой
Всем привет. Такая проблема: имеется сервер с двумя сетевыми картами, необходимо приходящие пакеты на eth0 отправить с eth1. На eth0...

Использование String Tables в .dll(.dll.mui) (Для VB .NET)
Здравствуйте. Нужно извлечь(а потом запоковать) таблицу строк(string tables ). Допустим есть файл explorerframe.dll.mui из...

Ошибка об отсутствии MSVCP140D.dll, ucrtbased.dll, CONCRT140D.dll, VCRUNTIME140D.dll
Добрый день, товарищи. Возникла проблема. Делаю программу с использованием openCV 3.1 на Visual Studio 2013. При компиляции выдает ошибку...

Нужна Dll для exe msvbm70b.dll
Привет у меня есть exe просит Dll msvbm70b.dll, пришлите плз. Спасибо!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Реализация многопоточных сетевых серверов на 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 произвёл революцию, добавив в язык нативную поддержку потоков,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru