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