Fast Pimpl
Концепцию из статьи (насколько понял, достаточно необычную) народ принял с трудом, в комментариях было бурное обсуждение и иногда непонимание.
В комментариях затронули тему Fast Pimpl (понятия, не сильно связанного со статьей). Это как раз жутко боянистая концепция.
PImpl используется, чтобы скрыть детали реализации и/или ускорить компиляцию. До его использования код в хидере выглядит так:
#include <third_party/json.hpp>Стандартный подход заключается в замене
struct Value {
third_party::Json data_;
};
T на std::unique_ptr<T>, потому что он разрешает использовать incomplete class:namespace third_party { struct Json; }
struct Value {
std::unique_ptr<third_party::Json> data_;
};
Проблема, которая из-за этого возникает - аллокация объекта в куче, это замедляет рантайм PImpl-ового варианта ⏱ Поэтому используется подход Fast Pimpl:struct Value {
std::aligned_storage<sizeof(T), alignof(T)> data_;
};
(вместо sizeof(T) и alignof(T) надо руками ввести нужную цифру)То есть вместо самого объекта в структуре лежит буфер памяти под этот объект, и рулят именно им.
В интернете есть много реализаций этой идиомы (по гуглежу "Fast Pimpl"), и есть обёртки, которые хороши собой 🍬