从C++方法返回未定义的值

dre*_*ely 0 c++ templates undefined

我有一个类的形式

template <typename T>
class c {

    bool hasChild = *something*;
    T *child;

public:

    T getChild() {
        if(hasChild) {
           return *child;
        } else {
           return 0; // <<-- this line
        }

}
Run Code Online (Sandbox Code Playgroud)

我的实际班级非常不同,但这代表了我更简单的具体问题.当hasChild为false时,getChild将返回未定义的值.但是由于c ++没有像Java和其他语言那样的NULL值,我不确定我能返回什么,因为我没有其他类型为T的对象的引用,因为它是一个模板而无法构造一个.根据API的要求,该方法method必须返回类型为T的对象,因此更改方法签名以返回其他堆栈溢出帖子上建议的T*不是一种选择.

谢谢!

Tas*_*Tas 5

通常,您可以使用std::optional(std::experimental::optional如果不是C++ 17)来解决这个问题,以表明a c可能有也可能没有孩子.请注意,如果您返回,T*只需返回即可nullptr.两者都需要更改功能签名,您已经说过这是不允许的.

这真的只剩下两个选择:

  1. throwexception,如果一个孩子没有找到
  2. 返回一个新建的T,如在评论@elinx亮点

既然你已经声明没有孩子就没有定义你应该抛出异常.在调用之前,有责任确保对象有一个孩子getChild.如果您只是返回一个T(),则来电者可能没有意识到没有孩子.