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.

C++: definir una macro para tomar un argumento y expandirlo en múltiples argumentos de otra macro

Necesito que boo tome dos variables/constantes explícitas o una única invocación de macro que se expanda en dos variables/constantes. Actualmente, esto no se compila. Como se puede observar, una vez que foo se expande, no parece tratarse como argumentos múltiples para boo.

#include <iostream>
#include <string>

int getInt(int x, int y)
{
    return x + y;   
}

#define boo(x, y) getInt(x, y)
#define foo(x) x, 1

int main()
{
  std::cout << boo(foo(1));
  std::cout << boo(1, 2);
}

¿Alguna idea?

https://godbolt.org/z/79o7Td66x

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está relacionado con la expansión de macros y el paso de argumentos. Una solución podría ser modificar la macro foo para que devuelva una tupla en lugar de un único argumento, de esta manera:

    #define foo(x) std::make_tuple(x, 1)
    

    Luego, la macro boo podría modificarse para aceptar una tupla en lugar de dos argumentos separados, de esta manera:

    #define boo(x) getInt(std::get<0>(x), std::get<1>(x))
    

    Con estas modificaciones, el código debería compilar y producir los resultados esperados.

Comments are closed.