Получение имени текущего метода в c ++ - PullRequest
14 голосов
/ 29 октября 2008

Есть ли (стандартизированный) способ получения имени текущего метода с использованием c ++?

Используя GNU GCC, вы можете сделать это с помощью макросов __FUNCTION__ и __PRETTY_FUNCTION__ (в окружении 2 символов подчеркивания), однако это, конечно, непереносимо. Есть ли способ сделать это в стандартном C ++ или способ сделать его переносимым?

Ответы [ 4 ]

27 голосов
/ 29 октября 2008

Идентификатор __func__ является частью стандарта C99 и находится в черновике C ++ 0x.

Идентификатор __func__ неявно объявляется компилятором, как если бы в самом начале каждого тела функции было следующее:

static const char __func__[] = "function-name";

где function-name - строка, определяемая реализацией, автоматически предоставляемая компилятором.

До тех пор, пока поддержка этих стандартов не станет доступной (или более широко доступной), вы застреваете в ганк для конкретного компилятора.

1 голос
/ 29 октября 2008

Нет ...... но некоторые вещи оказываются нестандартными!

см. http://msdn.microsoft.com/en-us/library/b0084kay(VS.80).aspx, в котором описываются стандартные элементы ANSI, а затем microsofs, которые включают FUNCTION

0 голосов
/ 29 октября 2008

Это называется "самоанализом", и в стандартах c ++ такого нет. Вы должны использовать внешнюю библиотеку (Boost, я думаю, поддерживает это как-то). Но попробуйте выяснить, действительно ли причина его использования действительно хорошая.

0 голосов
/ 29 октября 2008

Нет, он не поддерживается стандартом c ++.

...