Załóżmy mam RAII stylu C++ Klasa:Czy można zapobiec powstawaniu "anonimowo" klasy w stylu RAII?
class StateSaver
{
public:
StateSaver(int i) { saveState(); }
~StateSaver() { restoreState(); }
};
... być używane tak jak w moim kodu:
void Manipulate()
{
StateSaver save(1);
// ...do stuff that modifies state
}
... celem jest, aby podać stan, zrobić rzeczy, a następnie opuść ten stan, kiedy opuszczę ten zakres. Czy istnieje sposób, aby ten błąd nie został skompilowany (lub ostrzec, lub jakoś narzekać, aby błąd został zauważony)?
void Manipulate()
{
StateSaver(1); // ruh-roh, state saved and immediately restored!
// ...do stuff that modifies state
}
Nie jestem świadomy czegokolwiek w C++, którego mogłem użyć, aby temu zapobiec, ale to nie znaczy, że nie istnieje. Jeśli nie ma niczego w C++, dopuszczalne są rozszerzenia specyficzne dla kompilatora. Interesuje mnie przede wszystkim cokolwiek skierowane na gcc i msvc (kiedyś icc, pomysły na inne kompilatory mile widziane, ale mniej prawdopodobne, że będą użyteczne), więc przydatne byłoby hackowanie któregokolwiek z nich (wyodrębnione odpowiednio # ifdef'd definicji makr) .
SaveMatrix(): -> Wygląda na to wywołanie funkcji do mnie. –
SaveMatrix save(): -> Wygląda mi na funkcję deklaracji funkcji. –