Макросы в порядке. Шаблоны в порядке. Практически все, что работает, прекрасно.
Примером является OpenGL; но эта технология имеет специфику С++ и не опирается на знание OpenGL.
Точная проблема:
Я хочу выражение E; где мне не нужно указывать уникальное имя; так что конструктор вызывается, где E определен, и деструктор называется, где блок E находится в концах.
Например, рассмотрим:
class GlTranslate {
GLTranslate(float x, float y, float z); {
glPushMatrix();
glTranslatef(x, y, z);
}
~GlTranslate() { glPopMatrix(); }
};
Решение вручную:
{
GlTranslate foo(1.0, 0.0, 0.0); // I had to give it a name
.....
} // auto popmatrix
Теперь у меня это не только для glTranslate, но и множество других PushAttrib/PopAttrib вызовов. Я бы предпочел не придумывать уникальное имя для каждого var. Есть ли какой-то трюк с шаблонами макросов... или что-то еще, что автоматически создаст переменную, конструктор которой вызывается в точке определения; и деструктор, вызванный в конце блока?
Спасибо!