Сообщение Re: Экспорт p-impl из dll от 14.08.2023 8:20
Изменено 14.08.2023 8:21 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; // warning: C4251: 'Foo::p_impl': class 'std::shared_ptr<Foo::IImpl>' needs to have dll-interface to be used by clients of class 'Foo'
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 do_work2_impl();
};