Aritmética de tiempo en macros de C++
Estoy trabajando en un cargador de wgl y he tipificado cada función de openGL que uso de la siguiente manera:
“`
/ Digamos que estoy definiendo n funciones /
typedef return_t (*f1)(params)
f1 _glFunc1;
<h1>definir glFunc1(params) _glFunc1(params)</h1>
…
typedef return_t (*fn)(params)
fn _glFuncn;
<h1>definir glFuncn(params) _glFuncn(params)</h1>
<code>
Luego, para obtener las definiciones de estas funciones, tengo que usar wglGetProcAddress o GetProcAddress y luego convertir el resultado a f1, f2 …
Intenté automatizar la conversión con esta macro:
</code>
<h1>definir GetFuncDef(glFunc) _##glFunc = (f##(<strong>LINE</strong> – startingLineNumber + 1))GetProcAddress(#glFunc)</h1>
“`
Donde startingLineNumber
es la primera línea en la que uso esta macro (en mi caso es la 22),
pero el preprocesador no calcula __LINE__ - startingLineNumber
.
¿Hay alguna forma de obligarlo a hacerlo?
EDICIÓN:
startingLineNumber
no es una variable, macro, etc. Está escrito como un número literal en mi código. como esto:
#define GetFuncDef(glFunc) _##glFunc = (f##(__LINE__ - 22 + 1))GetProcAddress(#glFunc)
, donde 22 sería startingLineNumber
davy.ai
Desafortunadamente, no es posible que el preprocesador calcule
__LINE__ - startingLineNumber
ya questartingLineNumber
no es una macro o variable definida, sino un valor literal en el código. En este caso, deberás calcular manualmente los desplazamientos de línea y actualizar el valor destartingLineNumber
en la definición de la macro según sea necesario.Alternativamente, puedes modificar la macro para que tome
startingLineNumber
como parámetro, de modo que puedas pasarlo durante el uso sin tener que modificar la definición de la macro en sí:Luego llámalo de esta manera:
De esta manera, puedes especificar
startingLineNumber
según sea necesario para cada llamada de la macro.