Tengo una macro, donde uno de los argumentos es un valor enum, que se proporciona sin especificar el ámbito del espacio de nombres. Sin embargo, en algún lugar dentro de la macro, necesito acceder a ella (obviamente, debo definir el espacio de nombres allí), pero parece que no puedo concaturar el nombre del espacio de nombres con el parámetro de la plantilla. Dado el siguiente código de ejemplo, el compilador se queja de que pasting :: and Val doesnt give a valid preprocessor token
(funciona bien para concating get y a getVal).Argumento macro de Concat con espacio de nombres
namespace TN
{
enum Info
{
Val = 0
};
}
#define TEST(a) TN::Info get ## a(){return TN::##a;}
TEST(Val)
Entonces, ¿hay alguna manera de hacer este trabajo sin necesidad de utilizar otro argumento y, básicamente, especificando el valor que se utilizará dos veces (por ejemplo, #define TEST(a,b) TN::Info get ## a(){return b;}
)?
obviamente estoy pensando en la forma de complejo, gracias – Grizzly
@Grizzly: ¡Irónicamente, todo lo contrario! Mi primer instinto también es concatenar, porque las macros son básicamente la sustitución de texto de buscar y reemplazar. Es cuando te das cuenta de que son más complejos que esto (dado que trabajan en _tokens_ y nuestros cerebros no) que surgen problemas como este. :) –