Получение имени текущего метода в С++

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

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

Ответы

Ответ 1

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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