По сути, я хочу, чтобы все подтипы создавались с помощью фабричного метода (у меня высокая иерархия доменов с более чем 200 классами).
Для new
это не проблема, так как это может быть переопределено в A (делая new
приватным).
class A{
protected:
A();
public:
template<class T, typename... ARGUMENTS>
static T* create(ARGUMENTS&&... arguments);
};
class B : public A {
public:
B();
};
void test() {
B b;//compile error wanted here - but as a consequence of inheriting A
}
Здесь A - это класс "библиотека / фреймворк". Принимая во внимание, что B - «созданный пользователем класс». Вполне возможно, потребуется typedef или аналогичный для B.
ОБНОВЛЕНИЕ: Я добавил функцию «создать» на А, которую я намерен использовать для создания объектов.