c++ 'return_if_null(T* ptr)'可能吗?

zf9nrax1  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(129)

我发现自己做了很多

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;
}
zpgglvta

zpgglvta1#

return_if_null(T* ptr)可能吗?
没有。
我想到了宏观
好吧,有可能。但不要。
我们不太清楚为什么要这样做,但是如果您要探索不同的样式,可以这样编写函数:

void doSomethingCool(CoolObject* coolObject) {
   if (coolObject) {
      // now _actually_ do something cool
   }
}

但这当然是品味的问题。

相关问题