Возможно ли, чтобы выполнить следующее:
x.hpp - этот файл включен многими другими классами
class x_impl; //forward declare
class x {
public:
//methods...
private:
x_impl* impl_;
};
x.cpp - реализация
#include <conrete_x>
typedef concrete_x x_impl; //obviously this doesn't work
//implementation of methods...
В принципе, я хочу, чтобы пользователи включали файл x.hpp, но не знали о заголовке conrete_x.hpp.
Так как я могу использовать concrete_x
только указателем и он появляется только как частный элемент данных, для компилятора должно быть достаточно прямого объявления, чтобы узнать, сколько места для его подготовки. Это похоже на известную "идиому прыгуна".
Можете ли вы мне помочь?
PS. Я не хочу использовать void*
и отбрасывать его вокруг.