C++, получите название функции

В C++, там способ получить функциональную подпись/имя от, он похож на указатель это?

void test(float data) {}
cout << typeid(&test).name();

Я хочу использовать эти данные для входа.

15
задан Eric Leschinski 8 July 2013 в 14:11
поделиться

4 ответа

Если вы просто хотите записать текущее имя функции, большинство компиляторов имеют __ FUNCTION __ , который даст вам текущее имя функции во время компиляции.

Вы также можете поискать методы обхода стека (здесь пример для Windows ), которые могут предоставить вам дополнительную информацию о текущем стеке вызовов и именах функций во время выполнения.

17
ответ дан 1 December 2019 в 00:49
поделиться

Я не уверен на 100%, но мне это кажется отражением (Java), а C ++ не поддерживает такие вещи. Может быть, я просто не знаю, но я еще не видел этого для C ++.

0
ответ дан 1 December 2019 в 00:49
поделиться

Вы не можете узнать имя функции. Просто потому, что он не находится внутри исполняемого файла. Он полностью исчезает после того, как ваш код скомпилирован и связан.

Вы можете попробовать переименовать свои функции / переменные, и ваш исполняемый файл будет таким же (за исключением изменяемых вещей, которые может поставить компилятор, таких как дата / время сборки, идентификатор отладочной информации и т. Д.)

Также попробуйте открыть файл исполняемый файл с каким-нибудь редактором и ищите имя функции. Скорее всего, вы его не найдете.

Однако вы можете добавить некоторые программные «украшения», которые помогут вам узнать имя вашей функции во время выполнения.

3
ответ дан 1 December 2019 в 00:49
поделиться

Вы не можете получить имя функции в C ++, но вы можете распечатать указатель и позже проверить двоичный файл (если он не удален) на предмет имени функции. Подпись может быть напечатана точно так же, как и вы, только имя типа не является «читаемым человеком». Проверьте документацию вашего компилятора, чтобы узнать, что означает вывод вашего кода. В g ++ вывод будет PFvfE , что я не понимаю полностью, но идентифицирует указатель ( P ) на функцию ( F ), возвращающую void ( v ) и использование числа с плавающей запятой ( f ) в качестве единственного аргумента. Не спрашивайте меня, что такое E ...

(у меня сейчас нет времени проверять документацию, я просто поигрался с программой-образцом, чтобы догадаться, что: печатать разные сигнатуры функций)

1
ответ дан 1 December 2019 в 00:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: