私はRAIIスタイルのC++クラスがあるとします。RAII形式のクラスが「匿名で」インスタンス化されないようにすることはできますか?
class StateSaver
{
public:
StateSaver(int i) { saveState(); }
~StateSaver() { restoreState(); }
};
...私のコードでそれのように使用される:
void Manipulate()
{
StateSaver save(1);
// ...do stuff that modifies state
}
...目標は、いくつかの状態を入力すること、やります私がその範囲を離れるとき、その状態を残す。このタイプミスをコンパイルしない(または警告する、または何らかの形で間違いが気づくことがあるようにする)方法はありますか?
void Manipulate()
{
StateSaver(1); // ruh-roh, state saved and immediately restored!
// ...do stuff that modifies state
}
私はこれを防ぐために使用できるC++自体で何かを認識していないんだけど、それはそれは存在しないという意味ではありません。 C++に何もない場合、コンパイラ固有の拡張は受け入れられます。私は主にgccとmsvcをターゲットとするものに興味があります(いつかicc、他のコンパイラのアイデアを歓迎しますが有用ではありません)ので、それらのいずれかのハックが役に立つでしょう(適切なifdef'dマクロ定義に抽象化されています) 。
SaveMatrix(): - >私への関数呼び出しのように見えます。 –
SaveMatrix save(): - >私の関数宣言のように見えます。 –