Альф в принципе интерфейс у меня тоже описан
Однако в примере этого не видно. Функция
GetLayerEngine возвращает указатель на класс
CLayerEngine, а не на интерфейс. Поэтому проку от наличия интерфейса немного.
Пользователь может вызывать только функции public все опасные функции protected и private в том числе и данные Хотелось просто перестраховаться
Так это для любого класса справедливо. Только при этом получается, что после создания класса ты и сам не сможешь изменить его состояние. Иногда это хорошо, а иногда и не очень. Лучше все же разделить интерфейсы на интерфейс доступа к данным только на чтение (общедоступный) и интерфейс изменения состояния класса. Клиенту, который должен лишь читать состояние, передавать лишь ссылку на первый.
видимо не получится так сделать как я хотел?
Можно попробовать еще описать твой метод как
void AnyMethod(void) const;
Возможно, в этом случае сработает твой первый вариант (со ссылкой на константный класс).
P.S. И лучше все-таки не применять преобразование типов в стиле C (вроде
(CLayerEngine*)(&m_LayerEngine)). Лучше применять стиль C++, он гораздо более предсказуем.