RAIIでは、リソースはアクセスされるまで初期化されません。ただし、多くのアクセスメソッドは定数として宣言されています。mutable
データメンバーを初期化するために(非const)関数を 呼び出す必要があります。
例:データベースからのロード
struct MyClass
{
int get_value(void) const;
private:
void load_from_database(void); // Loads the data member from database.
int m_value;
};
int
MyClass ::
get_value(void) const
{
static bool value_initialized(false);
if (!value_initialized)
{
// The compiler complains about this call because
// the method is non-const and called from a const
// method.
load_from_database();
}
return m_value;
}
私の基本的な解決策は、データメンバーをとして宣言することmutable
です。他の方法でメンバーを変更できる可能性があるため、これは行いません。
load_from_database()
コンパイラエラーを取り除くためにステートメントをキャストするにはどうすればよいですか?