Re[10]: Экспорт p-impl из dll
От: andyp  
Дата: 26.07.23 12:56
Оценка:
Здравствуйте, so5team, Вы писали:

S>Только вот ждем-с и ждем-с...


Не дождемся скорее всего.

Вот предложение Саттера
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0709r0.pdf

Вот ответ Страуструпа
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1947r0.pdf

Вот релевантная нитка на реддите
https://www.reddit.com/r/cpp/comments/pfjtvr/what_is_your_review_of_c_exceptions_and/


PS Ну и нечто более свежее. С заголовком согласен от и до
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2544r0.html
Отредактировано 26.07.2023 13:05 andyp . Предыдущая версия .
Re: Экспорт p-impl из dll
От: vdimas Россия  
Дата: 14.08.23 08:20
Оценка: 15 (1)
Здравствуйте, Chorkov, Вы писали:

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();
};
Отредактировано 14.08.2023 8:22 vdimas . Предыдущая версия . Еще …
Отредактировано 14.08.2023 8:21 vdimas . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.