Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Operok
174 / 172 / 64
Регистрация: 15.02.2015
Сообщений: 496
Завершенные тесты: 2
#1

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

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

Речь пойдёт, само собой, о неявно подключаемой dll для хранения классов. Решил пойти в сторону интерфейсов и фабрик классов, тут вроде всё просто, абстрактный класс с нужными методами и статик метод "Create()" в роли фабрики. Работаем с экземплярами классов через указатели, что не может радовать, ведь, создавая статик либу, я от этого пытался уйти, экземпляры некоторых классов привычно использовать по значению (константные ссылки и семантика перемещения мне в помощь). И вот задумал я засунуть интерфейсы в умные указатели, однако, за неимением явных конструкторов у первых, затея провалилась. Тогда я написал простенький RAII класс для конкретного интерфейса, хранящий указатель на экземпляр, в конструкторе вызываем функцию-фабрику (можно передавать как параметр шаблона), в деструкторе статик метод "Release(IMyClass*)", ну и оператор "->" для доступа к методам. Потестил, работает. Минус в, том что логика этого RAII класса должна быть в Header'е, хотя этого не избежать и потому, что этот должен быть шаблонный класс, ещё получается большая вложенность ресурсов, но тут можно заинлайнить методы RAII класса.
В общем имеет ли смысл использовать такой подход? Есть ли другие подходы? Всё-таки не вариант пользоваться голыми указателями, хоть new и delete явно больше не используются, на их место пришли "Create()" и "Release()".
http://www.cyberforum.ru/cpp/thread50562.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2015, 23:52
Я подобрал для вас темы с готовыми решениями и ответами на вопрос DLL, RAII для интерфеса (C++):

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями?
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL...

C++ обертка для dll C
Как написать C++ обертку для динамической библиотеки C?

Окно для DLL
Всем привет! Есть уже готовая DLL... Нужно чтобы на экране отображался...

Справка для DLL (COM)
Всем привет! Хочу сделать HELP в com-объекте, для возможности посмотреть...

DLL для запуска
Всем доброго времени суток =) Пишу в MVS 2012, знаю что если запускать...

4
Perfilov
264 / 164 / 56
Регистрация: 25.02.2015
Сообщений: 435
12.06.2015, 00:00 #2
не понятно что значит следующее:
C++
1
 И вот задумал я засунуть интерфейсы в умные указатели, однако, за неимением явных конструкторов у первых, затея провалилась.
пробовали ли юзать фичу кастомных делитеров для стандартных смартпоинтеров?
1
Operok
174 / 172 / 64
Регистрация: 15.02.2015
Сообщений: 496
Завершенные тесты: 2
12.06.2015, 00:22  [ТС] #3
Цитата Сообщение от Perfilov Посмотреть сообщение
не понятно что значит следующее:
На сколько мне известно, конструктор смартпоинта (например shared_ptr<IMyClass>) захочет вызвать конструктор IMyClass(), что ничего не даст.
Цитата Сообщение от Perfilov Посмотреть сообщение
пробовали ли юзать фичу кастомных делитеров для стандартных смартпоинтеров?
Слабо я, видать, знаком со смартпоинтами... Наверняка ему и функцию-фабрику можно передать
0
DrOffset
7517 / 4513 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
12.06.2015, 00:46 #4
Цитата Сообщение от Operok Посмотреть сообщение
захочет вызвать конструктор IMyClass()
Создание объекта не на его совести. Так что не захочет.

Цитата Сообщение от Operok Посмотреть сообщение
В общем имеет ли смысл использовать такой подход?
Недавно только демонстрировал. std::unique_ptr - это и есть один из стандартных смартпойнтеров. Указание кастомного делитера - присутсвует.
1
Operok
174 / 172 / 64
Регистрация: 15.02.2015
Сообщений: 496
Завершенные тесты: 2
15.06.2015, 11:38  [ТС] #5
Многое прояснилось. Смартпоинты решил не засовывать в dll (в хедер), разбираться с этим надо уже в программе-клиенте. Более того, решил смотреть сразу в сторону COM.
Позвольте, задам здесь такой вопрос по использованию типа VARIANT. Работая с некоторыми компонентами (Excel.Application, например), методы возвращали этот тип данных, из которго я уже вытаскивал либо другой интерфейс, либо, например BSTR. Как подобное реализуется при создании своего компонента? "Руками" собирать "VARIANT" или возвращаем нужный нам тип (а клиент уже будет работать с вариантом)?
0
15.06.2015, 11:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2015, 11:38
Привет! Вот еще темы с решениями:

Для чего используется DLL?
исходники кода написанного на C++ хранятся в DLL верно?? Для чего используется...

Оптимизация для dll в visual c++
Какие флаги включить/отключить и какие прагмы писать в коде, чтобы не делал...

Тема для курсовой(DLL, C++)
Всем привет. Пожалуйста, помогите с заданием для курсовой. Идея заключается в...

DLL для Windows Mobile
Всем добрый день. Такая проблема: есть библиотека DLL, которая была написана...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru