|
12.05.2011, 16:42
|
#1
|
Знающий
Регистрация: 18.02.2008
Сообщений: 276
Написано 121 полезных сообщений (для 299 пользователей)
|
STL export
Всем привет.
Такая задача:
A ) Нужно экспортировать класс из DLL, но методы его работают с std::string. Проблема в том что разные STL между собой не совместимы. Как быть? - писать свои строки
- писать обертку для стандартных строк и экспортировать ее
- компилировать dll для каждой версии STL (а их наверное не мало?)
B ) Нужно экспортировать класс из DLL, но в ряды его protected членов затесался std::vector. Если его не трогать, то проблем нет. Но если создать производный класс, и обратиться к вектору, то при использовании разных STL видимо получим ошибку.
варианты те же.
Можете что-нибудь подсказать? Может еще какие-нибудь варианты?
|
(Offline)
|
|
12.05.2011, 18:44
|
#2
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: STL export
хороший вопрос
я думаю лучше по возможности не использовать неперносимые типы на стыке библиотека - клиентская программа
хотя сам так делаю((
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
12.05.2011, 18:54
|
#3
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: STL export
в принципе и стринг и вектор внутри имеют неразрывный линейный массив данных. можно передавать просто указатель на него (string::c_str(), &myVector[0]) и подсовывать (как? не знаю, надо курить) в другой стринг/вектор, желательно без копирования.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
12.05.2011, 20:34
|
#4
|
Знающий
Регистрация: 18.02.2008
Сообщений: 276
Написано 121 полезных сообщений (для 299 пользователей)
|
Ответ: STL export
в принципе и стринг и вектор внутри имеют неразрывный линейный массив данных. можно передавать просто указатель на него (string::c_str(), &myVector[0]) и подсовывать (как? не знаю, надо курить) в другой стринг/вектор, желательно без копирования.
|
Если функции будут принимать указатель на массив, то это будут обычные char*, object* и т.п., все удобство STL пропадет.
Хотя может и черт с ним, может стоит отказаться от STL...
|
(Offline)
|
|
10.08.2012, 00:33
|
#5
|
Бывалый
Регистрация: 06.04.2009
Сообщений: 612
Написано 276 полезных сообщений (для 858 пользователей)
|
Ответ: STL export
Таки какие выводы вы сделали за год? Как обходите?
|
(Offline)
|
|
10.08.2012, 01:09
|
#6
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: STL export
не экспортирую стл (и вообще шаблонные типы).
стл используется внутри ядра - а наружу торчат простые типы, структуры и указатели.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
10.08.2012, 08:21
|
#7
|
Знающий
Регистрация: 18.02.2008
Сообщений: 276
Написано 121 полезных сообщений (для 299 пользователей)
|
Ответ: STL export
Сообщение от HolyDel
не экспортирую стл (и вообще шаблонные типы).
стл используется внутри ядра - а наружу торчат простые типы, структуры и указатели.
|
Аналогично. Но я экспортирую шаблонный класс - свои строки, т.к. в некоторых случаях необходимо, чтобы пользователь выделил память под получаемую строку. И чтобы с этим небыло заморочек, он просто создает экземпляр моего класса и передает в функцию.
В остальных случаях аналогично: наружу торчат простые типы, структуры и указатели.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:43.
|