Macro para reemplazar el operador C ++ nuevo
¿Es posible crear macros para reemplazar todas las formas deoperator new
con sobrecargas que incluyen argumentos adicionales ... diga__FILE__
y__LINE__
?
El problema parece ser queoperator new
puede codificarse con o sin paréntesis, por lo tanto:
como objeto macros:
#define new new(__FILE__, __LINE__)
reemplazará declaraciones como:
A* a = new A();
y como función macros:
#define new(A) new (A, __FILE__, __LINE__)
reemplazará declaraciones como:
A* a = new(std::nothrow) A();
amentablemente, es un error intentar declarar dos macros con la misma identificador, incluso si son de diferente tipos, por lo que falla lo siguiente:
#define new new(__FILE__, __LINE__)
#define new(A) new (A, __FILE__, __LINE__) // Error: "new" already defined
Ya que estoy usando g ++ tenía la esperanza de que empleando su sintaxis de macros variables produciría éxito, pero desafortunadamente no. El seguimiento
#define new(...) new(__FILE__, __LINE__, ## __VA_ARGS__)
solo coincidenew(xyx) A()
, nonew A()
.
Yo sé esoe han escrito @ ensayos sobre por qué es imposible, pero siento que estoy tan cerca que debe haber una manera. ¿Hay algo obvio que me estoy perdiendo?