Макросы как параметр по умолчанию для аргумента функции - PullRequest
0 голосов
/ 16 августа 2010

Я пишу файл журнала. Я бы предпочел использовать там макросы __ FUNCTION __ . Мне не нравится, как:

Logger.write("Message", __FUNCTION__);

Может быть, можно сделать что-то вроде:

void write(const string &message, string functionName = __FUNCTION__)
{
   // ...
}

Если нет, есть ли способы сделать это не руками (я имею в виду передачу имени функции)?

Ответы [ 2 ]

4 голосов
/ 16 августа 2010

Вы можете сделать что-то подобное, обернув все это в макрос:

#define log(msg) Logger.write(msg, __FUNCTION__)

Недостатком является то, что вам понадобится область действия Logger при использовании этого макроса.

2 голосов
/ 16 августа 2010

Макросы работают только путем подстановки текста - препроцессор помещает определение макроса вместо его имени. У вас не может быть «интеллектуальных» макросов, подобных тому, который вы предлагаете.

Нет поддержки того, что вы хотите в стандартном C ++.

...