Я часто использую шаблон фабрики классов, согласно которому у класса есть частный конструктор и статический метод для создания класса. Это допускает ситуацию, когда класс не может быть построен по какой-либо причине, и возвращается значение null - очень удобно.
Я хотел бы иметь возможность расширить это до фабричного метода, который создает определенный класс из иерархии производных классов в зависимости от условий. Однако я не вижу способа скрыть конструкторы производных классов, чтобы принудительно использовать фабричный метод. Если фабричный метод находится в базовом классе, он больше не имеет доступа к частным конструкторам производных классов. Помещение фабричного метода в каждый производный класс не работает, поскольку требуемый тип должен быть известен заранее. Вложенные классы могли бы быть способом, если бы у класса был доступ к закрытым членам вложенного класса, но, к сожалению, кажется, что вложенные классы имеют доступ к закрытым членам включающего класса, но не наоборот.
Кто-нибудь знает, как это сделать?