コードベースでは、gccコンパイルオプションで "-fno-exceptions
"を意味するC++例外は使用しません。(これは当社の方針であるため注意してください。しかし、そのような場合、例外をスローするコンストラクタの失敗を標準ライブラリからチェックする方法。私はいくつかのSOの投稿を読んだが、まだ明確なアイデアはない。たとえば、C++ 11では、std::regex("pattern")
はregex_error例外をスローできます。私は次のコードをお持ちの場合:例外が発生したコンストラクタの失敗をチェックする方法
class Wrapper {
public:
bool create(std::string pattern) {
try {
m_regex = std::regex(pattern);
m_state = true;
} catch (std::regex_error& e) {
//handle error case
m_state = false;
}
}
private:
std::regex m_regex;
bool m_state;
}
を注: m_regex = std::regex(pattern);
例外をスローしていないで、今すぐオペレータ
basic_regex& operator=(basic_regex&& __rhs) noexcept
を割り当てる移動することができます
explicit basic_regex(const CharT* s, flag_type f = std::regex_constants::ECMAScript)
を呼び出します例外を使用するオプション、どのように我々は失敗を確認することができますか? f std :: regexのコンストラクタ?
class Wrapper {
public:
create(std::string pattern) {
m_regex = std::regex(pattern);
// now, how to check?
// if (m_regex)?
m_state = true;
}
private:
std::regex m_regex;
}
std :: regexには、障害を示す可能性のある状態が見つかりませんでした。
オプション1:正規表現のコンストラクタが失敗し、abort()が発生した場合、次の文m_state = true
は実行されません。私はチェックした、abort()例外が有効になって通常起こるが、キャッチが使用されないようだ。だからこれは間違っている。
オプション2:std::regex* ptr_regex = new std::regex("pattern")
を使用して、ptr_regexのヌルネスを確認できますか?
できません。例外を使用することが許可されていない場合(キャッチするだけであっても)、STLの使用を避ける必要があります。 – Gonmator
@GonmatorはSTLだけでなく、特に正規表現を含むC++標準ライブラリのすべての部分を避けなければならないことを除いて、 –
非常に低いリソースの組み込みプログラミングや、従来のコードベース(これはGoogleの仕組み)などの非常に良い理由がない限り、「当社は例外を許可しません」という良い解決策の1つは、可能であれば、他の場所で仕事を見つける。無能者の重要な政策の1つでは、残りの部分がまったく不調である可能性があります。例えば、チーフエグゼクティブは、働く倫理コンパスの欠如を明らかにする:それは組織のほぼすべてに影響を与えた可能性が高い。 –