【发布时间】:2020-03-16 09:19:10
【问题描述】:
我一直在想:由于异常可以是任何类型,它们是否可以根据条件返回不同的类型?
我知道这不是很清楚,所以我举个例子:对于一个消息传递应用程序,我们希望用户能够发送他们的位置,但出于隐私原因,我们希望它仅在用户是在线:
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 作为失败的操作标志和类似的东西。想法?意见?我完全错过了什么吗?
【问题讨论】:
-
我更喜欢使用
std::optional,这似乎是适合这项工作的错误工具。返回不同的类型不是静态类型语言中应该发生分支的地方。 -
@super 这只是我能想到的第一个例子,而不是实际的用例。无论如何,答案是
std::variant -
std::variant<std::monostate,user_position>可能就是您要找的。span>
标签: c++ exception return-type