确保用户创建新子类的实例

时间:2018-02-16 14:52:50

标签: c++ googletest compile-time static-assert

我们说有一个基类

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中创建该实例?
  3. 在最好的情况下,我希望看到编译时错误。单位测试解决这个问题也是可以接受的。

    补充资料。
    1. Base类的用户在客户端创建新的子类 2.我的代码在后端运行。我远程获取子类id并使用Factory来创建客户端程序员创建的子类的实例。

0 个答案:

没有答案