es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, no es posible que el preprocesador calcule __LINE__ - startingLineNumber ya que startingLineNumber 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 de startingLineNumber 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í:

    #define GetFuncDef(startingLineNumber, glFunc) _##glFunc = (f##(__LINE__ - startingLineNumber + 1))GetProcAddress(#glFunc)
    

    Luego llámalo de esta manera:

    GetFuncDef(22, glFunc1);
    GetFuncDef(22, glFunc2);
    // ...
    

    De esta manera, puedes especificar startingLineNumber según sea necesario para cada llamada de la macro.

Comments are closed.