Что такое pField
(помимо прекрасного примера мерзости, которая называется Systems Hungarian)? Если, случайно, это глобальная переменная или синглтон или что-то, что нам нужно только одно, мы могли бы сделать хитрый трюк, подобный этому:
int FFX(int x)
{
static FIELD *pField = ...; // remove this line if pField is global
return pField->GetValue(x);
}
Измените типы int
на любые типы, с которыми вам нужно работать, или даже шаблон, если вам нужно, чтобы он поддерживал несколько типов.
Другая альтернатива, предложенная @ epatel , состоит в том, чтобы использовать функцию поиска и замены вашего любимого текстового редактора и просто изменить все строки FFX(x)
на pField->GetValue(x)
, что исключает вызов макроса в вашем код. Если вы хотите сохранить вызов функции, вы должны изменить FFX(x)
на FFX(pField, x)
и изменить макрос на два аргумента (или изменить его на функцию, которая принимает два аргумента). Но в этот момент вы можете просто взять макрос.
Третий вариант - не исправить то, что не сломано. Макрос не особенно хорош, но вы можете столкнуться с большими проблемами, пытаясь удалить его. Макросы не являются порождением сатаны (хотя у этого есть по крайней мере несколько родственников в аду).