Макрос / шаблон C / C ++ blackmagic для генерации уникального имени

Макросы в порядке. Шаблоны в порядке. Почти все, что работает, хорошо.

Примером является OpenGL; но эта техника специфична для C ++ и не опирается на знания 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. Я бы предпочел не придумывать уникальное имя для каждой переменной. Есть ли какая-то хитрость, связанная с шаблонами макросов ... или что-то еще, что автоматически создаст переменную, конструктор которой вызывается в точке определения; а деструктор вызывается в конце блока?

Спасибо!

Ответы на вопрос(3)

Ваш ответ на вопрос