C++
独自のメンバー関数を使用して構築を防ぐことによりthrow
、コンストラクターの本体の開き中括弧の前にクラスを例外にしたいと考えています。任意に選択された戻り値のない型と、その戻り値の型に一致する型を持つダミー データ メンバーを使用して、無条件に例外を発生{
させることだけを目的とするメンバー関数を定義しました。コンストラクター初期化子リストの上記のメンバー関数。これは機能しますが、非おもちゃのクラスでは、ダミー変数はメンバー関数を実行するための言い訳をする以外の目的を果たさず、メンバー関数の非throw
void
throw
void
戻り値の型は、同じ型のダミー データ メンバーのコンストラクターによって呼び出し可能になるための言い訳をする以外の目的はありません。
このおもちゃはコンパイルできますが、エレガントではありません:
class Toy
{
public:
Toy() : dummy(preventer()) {}
private:
int dummy;
int preventer() {throw -1; return 0;}
};
#include <iostream>
int main()
{
try
{
Toy t;
}
catch (const int& e)
{
std::cout << "caught the exception\n";
}
return 0;
}
コンソール出力:
caught the exception
{
ダミー変数がなければ、コンストラクタ本体の開き中括弧の前に例外をスローする方法はありますか?