Сообщение Re: Экспорт p-impl из dll от 14.08.2023 8:20
Изменено 14.08.2023 8:22 vdimas
Re: Экспорт p-impl из dll
Здравствуйте, Chorkov, Вы писали:
C>Как побороть:
Не указывай dllexport для всего класса, указывай только для нужных методов.
Плюшки — не будешь тянуть приватные методы в экспорт, оставишь легковесность инлайным.
C>Как побороть:
Не указывай dllexport для всего класса, указывай только для нужных методов.
Плюшки — не будешь тянуть приватные методы в экспорт, оставишь легковесность инлайным.
#define __declspec(dllexport) IMPORT_EXPORT
class Foo
{
private:
struct Impl;
std::shared_ptr<Impl> p_impl;
public:
// Все конструкторы/деструкторы заданы явно либо запрещены:
IMPORT_EXPORT Foo();
IMPORT_EXPORT Foo(const Foo&);
IMPORT_EXPORT ~Foo();
IMPORT_EXPORT Foo& operator=(const Foo&) = delete;
// Доступ к структуре объекта (на стороне dllimport) ненужен,
// На стороне пользователя может оказаться другой размер класса shared_ptr?
// ... что-то для работы с классом.
IMPORT_EXPORT int do_work(int);
// метод инлайный
int do_work2() {
if(int x = some_pre_сheck())
return x;
return do_work2_impl();
}
private:
// не экспортируется и не импортируется
int do_work2_impl();
};Re: Экспорт p-impl из dll
Здравствуйте, Chorkov, Вы писали:
C>Как побороть:
Не указывай dllexport для всего класса, указывай только для нужных методов.
Плюшки — не будешь тянуть приватные методы в экспорт, оставишь легковесность инлайным.
C>Как побороть:
Не указывай dllexport для всего класса, указывай только для нужных методов.
Плюшки — не будешь тянуть приватные методы в экспорт, оставишь легковесность инлайным.
#define __declspec(dllexport) IMPORT_EXPORT
class Foo
{
private:
struct Impl;
std::shared_ptr<Impl> p_impl;
public:
// Все конструкторы/деструкторы заданы явно либо запрещены:
IMPORT_EXPORT Foo();
IMPORT_EXPORT Foo(const Foo&);
IMPORT_EXPORT ~Foo();
IMPORT_EXPORT Foo& operator=(const Foo&) = delete;
// Доступ к структуре объекта (на стороне dllimport) ненужен,
// На стороне пользователя может оказаться другой размер класса shared_ptr?
// ... что-то для работы с классом.
IMPORT_EXPORT int do_work(int);
// метод инлайный
int do_work2() {
if(int x = some_pre_сheck())
return x;
return do_work2_impl();
}
private:
int IMPORT_EXPORT do_work2_impl();
// не экспортируется и не импортируется
int do_work3_impl();
};