我发现自己做了很多
void doSomethingCool(CoolObject* coolObject) {
if (coolObject == nullptr) {
return;
}
// now _actually_ do something cool
}
我想过宏,但感觉有点恶心...
// plus some other templating for other return types, but besides the point
#define RETURN_IF_NULL(nullable) if (nullable == null) { return; }
void doSomethingCool(CoolObject* coolObject) {
RETURN_IF_NULL(coolObject)
// now _actually_ do something cool
}
如果有std::return_if_null<T>
这样的东西就太酷了
#include <early_return>
void doSomethingCool(CoolObject* coolObject) {
std::return_if_null(coolObject);
// now _actually_ do something cool
}
我不认为这是可能的C++,因为它是现在,但我很想知道如果你认为这可以工作,或者如果你认为这将是一个有趣的语言功能。
编辑,完整的上下文,我想看到的是这样的东西。
template <typename T, typename ReturnType>
std::early_return<ReturnType> return_if_null(T* ptr, ReturnType defaultValue = {}) {
static_assert(std::is_default_constructible<T>());
if (ptr == nullptr) {
return std::early_return::abort{defaultValue};
}
return std::early_return::continue;
}
1条答案
按热度按时间zpgglvta1#
return_if_null(T* ptr)
可能吗?没有。
我想到了宏观
好吧,有可能。但不要。
我们不太清楚为什么要这样做,但是如果您要探索不同的样式,可以这样编写函数:
但这当然是品味的问题。