Описание тега pimpl-idiom

Идиома Pimpl, также известная как брандмауэр компиляции или техника Чеширского кота, представляет собой метод "частной реализации", полезный в C++ и других подобных статически компилируемых языках.
1 ответ

Идиома Pimpl, используемая с переменной члена класса

Как правильно реализовать этот класс? //Header #include <boost/shared_ptr.hh> class MyClass { public: static foo() static foobar(); private: class pimpl; static boost::shared_ptr<pimpl> m_handle; static bool initialized; }; //source name…
23 фев '10 в 23:02
6 ответов

Мог ли C++ не избавиться от идиомы pimpl?

Как я понимаю, pimpl идиома существует только потому, что C++ заставляет вас помещать все закрытые члены класса в заголовок. Если бы заголовок содержал только открытый интерфейс, теоретически, любое изменение в реализации класса не требовало бы пере…
1 ответ

Возможно ли снижение производительности при использовании расширенного варианта Pimpl?

Представь себе это. Я хочу создать классы, которые не раскрывают ничего из их базовой реализации. Даже не это, что есть указатель на реализацию. Я бы сделал это с глобальным пулом объектов. Что-то вроде этого. Класс Test, реализованный в классе Test…
01 окт '14 в 10:13
2 ответа

Сокрытие реализации вариационных шаблонов

У меня есть библиотека 3rdParty с таким методом: bool Invoke(const char* method, Value* args, size_t nargs) Он принимает массив своего внутреннего типа (конвертируемый в любые примитивные типы C++) и arg count в качестве своих внутренних параметров.…
29 май '17 в 19:57
2 ответа

Как создать частную статическую константную строку при использовании идиомы pimpl

Фон Я изучал, как реализовать идиому pimpl, используя более новый метод C++11, описанный Хербом Саттером на этой странице: https://herbsutter.com/gotw/_100/ Я пытаюсь изменить этот пример, добавив переменную-член к частной реализации, в частности, s…
05 авг '17 в 18:57
0 ответов

Когда выровнять 8 байтов не достаточно?

Я пытаюсь реализовать pimpl без кучи (адаптироваться из SO вопрос).Я думаю, что я должен зарезервировать char[] я и жесткий код alignment = 8,Тем не менее, я очень новичок в C++ выравнивания. Я боюсь, что 8 не достаточно. Мое обучение После некоторо…
21 мар '17 в 09:51
4 ответа

Поместить все методы в определение класса

Когда я использую идиому pimpl, стоит ли помещать все определения методов в определение класса? Например: // in A.h class A { class impl; boost::scoped_ptr<impl> pimpl; public: A(); int foo(); } // in A.cpp class A::impl { // method defined in…
23 дек '10 в 09:32
1 ответ

Дилемма проектирования C/C++ API

Я анализировал проблему разработки API в C++ и как обойти большую дыру в языке, когда дело доходит до отделения интерфейсов от реализаций. Я пурист и твердо верю в аккуратное отделение открытого интерфейса системы от любой информации о ее реализации…
27 фев '16 в 12:22
3 ответа

Свободная функция против функции члена

В чем преимущество наличия свободной функции (в анонимном пространстве имен и доступной только в одном исходном файле) и отправки всех переменных в качестве параметров по сравнению с тем, что функция-член частного класса свободна от каких-либо парам…
2 ответа

C++ Pimpl vs Чистая производительность виртуального интерфейса

Я понимаю, что есть довольно много сообщений на эту тему, но мне трудно найти ответ на этот конкретный вопрос. Для вызовов функций, который быстрее, чисто виртуальный интерфейс или pimpl? На первый взгляд, мне кажется, что чисто виртуальный интерфей…
2 ответа

Должен ли я использовать PIMPL везде?

Мой текущий проект включает в себя написание C++ API, и я решил использовать идиому PIMPL. Должен ли я использовать идиому PIMPL везде в моем проекте, например, мне нужно создать собственный класс, который наследуется от std::exceptionДолжен ли я пр…
15 дек '14 в 10:47
4 ответа

Почему при выводе значения я получаю значения мусора?

Я пытаюсь узнать об идиоме PIMPL и C++ в целом. У меня есть класс с интерфейсом в стиле PIMPL, который устанавливает значение int равным 7. Но я получаю мусорное значение при печати, и я не понимаю, почему. Код test.cpp #include <iostream> #in…
13 апр '16 в 00:35
2 ответа

Ошибка множественного определения при создании частного подкласса в классе Qt Pimpl

Я пытался реализовать класс Pimpl, следуя инструкциям на этой вики-странице Qt, в которой закрытый класс наследуется от другого закрытого базового класса. Вот основной пример: Базовый класс заголовок // gadget.h #ifndef GADGET_H #define GADGET_H #in…
16 май '16 в 14:32
2 ответа

C++ pimpl избегая пустоты *

Предположим, у меня есть библиотека, которую я хочу скрыть. В этой библиотеке есть функция, которая называется "весело" //Both class1 and class2 are defined in the library I want to hide class1 fun(class2 P) Я сейчас создаю pimpl для class1 и class2…
10 фев '16 в 05:59
1 ответ

Другие причины или цель использования Pimpl Idoim

Как следует из названия, мне было интересно, какие еще причины, цели или применения существуют для идиомы PImpl, кроме сокращения времени восстановления. Приведу пример отсюда : (Местные жители нити должны быть позади стены прыща; они не могут быть …
23 фев '17 в 08:19
1 ответ

Компилятор стреляет себе в ногу при попытке оптимизировать / встроить мой тривиально выглядящий, но нетривиальный dtor, что я делаю не так?

У меня есть этот общий прыщ *. Он объявляет объект реализации и имеет реализованный пользователем объект общего указателя для реализации идиомы pimpl (опять же, с семантикой совместного использования). Сгущенный, это выглядит так: foo.h #include "Sh…
29 июн '12 в 19:58
1 ответ

Pimpl с std::unique_ptr в производном классе

Я не понимаю следующий сценарий. Речь идет об использовании идиомы pimpl на основе std::unique_ptr в производном классе. Дана простая иерархия классов, объявленная следующим образом: class Foo { public: virtual ~Foo(); //... }; struct X; class Bar :…
06 июл '15 в 16:07
2 ответа

Явный вызов конструктора копирования объекта в unique_ptr

Я использую идиому pimpl с const std::unique_ptr провести реализацию класса. Мой класс должен поддерживать конструкцию копирования и назначение копирования. То, что я хотел бы сделать, это вручную вызвать конструктор копирования impl класс внутри un…
1 ответ

PIMPL разъяснение идиомы

При попытке удалить все детали реализации из заголовочного файла я решил использовать и опробовать идиому PIMPL. В большинстве, если не во всех примерах, например, cppreference, я видел уровни косвенного обращения, причину которых я не могу понять, …
20 дек '18 в 06:39
2 ответа

Доступ к месту чтения нарушения 0xfeeefe2 при вызове деструктора

Этот пост будет немного большим, поэтому заранее извините. Во всяком случае, я получаю исключение при запуске моей программы в режиме отладки (Visual Studio 2010), что я не могу понять, почему это происходит: Unhandled exception at 0x5524ad4a (msvcp…
12 сен '13 в 08:54