Убедитесь, что пользователь создает экземпляр нового подкласса

Допустим, есть базовый класс

class Base
{
}

и пользователь создал новый подкласс

class NewDerivedClass : public Base
{
}

Существует также перечисление для всех подклассов:

enum SubclassId
{
    Derived1_Id,
    Derived2_Id,
    ...
    NewDerivedClass_Id  // User has to add this line
}

Теперь есть также фабрика, которая создает производные экземпляры на основе SubclassId:

class SubclassFactory
{
    Base* CreateSubclassInstance(SubclassId subclassId)
    {
        switch(subclassId)
        {
            case SubclassId::Derived1_Id:
                return new Derived1(params);
            case SubclassId::Derived2_Id:
                return new Derived2(params);
             ...

            // User has to add the following lines:
            case SubclassId::NewDerivedClass_Id:
                return new NewDerivedClass(params);
        }
    }
}
  1. Как я могу заставить пользователя моего Base класс, чтобы добавить новый Id в перечислении?
  2. Как я могу заставить пользователя моего Base класс, чтобы создать его экземпляр в SubclassFactory?

В лучшем случае я хотел бы увидеть ошибку во время компиляции. Модульное тестирование решения этой проблемы также приемлемо.


Дополнительная информация.
1. Пользователи Base Класс создает новые подклассы на стороне клиента.
2. Мой код работает в бэкэнде. Я получаю идентификатор подкласса удаленно и использую Factory создавать экземпляры подклассов, созданных клиентскими программистами.

0 ответов

Другие вопросы по тегам