工厂函数采用Enum论证

时间:2012-10-08 11:43:31

标签: c++

如何避免并非所有控制路径都返回Container:

        enum Type {Int, String};

        Container containerFactory(Type type)
        {
            switch(type)
            {
            case Int:
                return Container (std::vector<int>());
            case String: 
                return Container (std::vector<std::string>());
            }
        }

更新 我在想我可以在这里抛出一个异常,但我不能对它进行单元测试,因为无法将无效的Type传递给函数。

3 个答案:

答案 0 :(得分:3)

我倾向于在底部添加assert()

Container containerFactory(Type type)
{
    // ...
    assert( !"Unreachable code hit!" );
    return Container();
}

答案 1 :(得分:2)

显然,传递无效值是编程错误。在“我的世界”/ rulebook /中,编程错误会导致断言失败,而不是异常。

编辑:出于这个原因,我实际上至少有两个主要的断言语句:一个在发布版本中被删除,另一个没有。如果错误被触发,大多数人最终会留在代码中,但有时断言可能太昂贵而不值得在发布版本中执行。

如果您的编译器没有将断言识别为“无法返回的内容”,则可以返回任何想要将其关闭的内容。除非您想要将错误检查添加到调用接口,否则无论如何都没有“良好的回报”,因为您不知道调用者希望从他的“759843682”未初始化请求中获得什么类型的容器: - )

答案 2 :(得分:1)

throw,默认返回Enum个类型之一或返回null_ptr