@ Роберт: Не могли бы вы предоставить какие-либо подробности?
ли создавать макросы для замены всех формoperator new
с перегрузками, которые включают дополнительные аргументы ... скажем__FILE__
а также__LINE__
?
Беда в том, чтоoperator new
может быть закодирован с или без скобок, поэтому:
Объект типа макросы:
#define new new(__FILE__, __LINE__)
заменит объявления как:
A* a = new A();
а такжефункция типа макросы:
#define new(A) new (A, __FILE__, __LINE__)
заменит объявления как:
A* a = new(std::nothrow) A();
К сожалению, ошибка в попытке объявить два макроса с одинаковымиидентификатордаже если они разныетипы, поэтому следующее не удается:
#define new new(__FILE__, __LINE__)
#define new(A) new (A, __FILE__, __LINE__) // Error: "new" already defined
Так как я использую g ++, я надеялся, что используя их синтаксисвариационные макросы принесет успех, но, к сожалению, нет. Последующий:
#define new(...) new(__FILE__, __LINE__, ## __VA_ARGS__)
только совпаденияnew(xyx) A()
неnew A()
.
я знаю этоэссе были написаны о том, почему это невозможно, но я чувствую, что я так близко, что должен быть способ. Есть ли что-то очевидное, чего мне не хватает?