簡體   English   中英

如何在cpp中編寫這個可以從function返回的宏

[英]How to write this macro in cpp that can return from the function

我正在使用 cpp 變體來指示我的程序中的錯誤,例如,我有一個 function 像這樣:

std::variant<Result, Error> do_foo();

std::variant<string, Error> do_bar() {
  auto v = do_foo();
  if (std::holds_alternative<Error>(v)) {
    return std::get<Error>(v);
  }
  auto r = std::get<Result>(v);
  // do some more stuff with r
  return some_str;
}

但是我最終檢查了很多次錯誤並且很乏味,所以我想寫一個宏,我們稱之為保釋,以縮短它。 所以 do_bar 可能看起來像這樣:

std::variant<string, Error> do_bar() {
  Result r = bail(do_foo()); // it should return if do_foo() returns an error
  // do some more stuff with r
  return some_str;
}

雖然不知道如何編寫該宏,但這里有一些不起作用的嘗試:

#define bail(v) { auto _v = v; \
  if (_v.index() == 1) return std::get<1>(_v); \
  std::get<0>(_v); }

但是,該塊並沒有給我任何價值。 請注意,我試圖避免異常。 任何幫助表示贊賞!

您想要的在便攜式 C++ 中是不可能的。 如果您使用的是 gcc 或 clang,則可以使用語句 exprs 我真的建議您不要這樣做,但這是您提出的問題的答案:

// Non-portable--you probably shouldn't do this
#define bail(v) ({            \
    auto _v = v;              \
    if (_v.index() == 1)      \
      return std::get<1>(_v); \
    std::get<0>(_v);          \
  })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM