首页 > 解决方案 > 异常是返回不同类型的合理方式吗?

问题描述

我一直在想:由于异常可以是任何类型,它们是否可以根据条件返回不同的类型?

我知道这不是很清楚,所以我举个例子:对于消息传递应用程序,我们希望用户能够发送他们的位置,但出于隐私原因,我们希望它仅在用户在线时显示:

void get_user_position(User& u) {
    if(!u.is_online()) throw false;
    else throw u.get_position();
}

void send_user_position(User& u) {
    try {
        get_user_position(u);
    } catch(bool e) {
        //send a message like "user isn't online"
    } catch(user_position e) {
        //send the position
    }
}

这将避免需要-1s 作为失败的操作标志和类似的东西。想法?意见?我完全错过了什么吗?

标签: c++exceptionreturn-type

解决方案


绝对不。你不会把剑带到桌子上切菜。在这种情况下,它甚至不是剑。它是一把刷子。

开个玩笑,看看你想做什么,这意味着你已经知道返回值的可能类型是什么。既然如此,请使用std::variant


推荐阅读