Я ищу выставить класс, который реализует цель RAII и переключает некоторое глобальное состояние. Для всех намерений и целей реализация класса должна быть скрыта. Другими словами, объявление класса выглядит следующим образом:
class ScopedToggleSomething {
public:
ScopedToggleSomething();
~ScopedToggleSomething();
};
и будет использоваться следующим образом:
ScopedToggleSomething localToggle;
это хорошо, но оно многословно. Если бы был какой-то стандартный базовый класс с виртуальным конструктором / деструктором, я мог бы сделать объявление намного проще, например:
std::unique_ptr<std::object> ScopedToggleSomethingFactory();
и использовать его так:
auto localToggle = ScopedToggleSomethingFactory();
и чтопозволяет мне скрыть даже объявление класса. std::object
не существует, очевидно, это просто чтобы подчеркнуть. У меня вопрос, есть ли какой-то стандартный базовый класс, который позволил бы мне реализовать такой шаблон и избежать ненужного многословия в заголовке. boost::noncopyable
приходит на ум, но у него нет виртуального деструктора, поэтому не будет работать.
РЕДАКТИРОВАТЬ : Мне кажется, я не был уверен, что то, что я искал, это не только RIAA,но также «скрыть» фактическую реализацию функциональности за пределами заголовка и объявить только минимальный необходимый для использования класс