В C++, там способ получить функциональную подпись/имя от, он похож на указатель это?
void test(float data) {}
cout << typeid(&test).name();
Я хочу использовать эти данные для входа.
Если вы просто хотите записать текущее имя функции, большинство компиляторов имеют __ FUNCTION __
, который даст вам текущее имя функции во время компиляции.
Вы также можете поискать методы обхода стека (здесь пример для Windows ), которые могут предоставить вам дополнительную информацию о текущем стеке вызовов и именах функций во время выполнения.
Я не уверен на 100%, но мне это кажется отражением (Java), а C ++ не поддерживает такие вещи. Может быть, я просто не знаю, но я еще не видел этого для C ++.
Вы не можете узнать имя функции. Просто потому, что он не находится внутри исполняемого файла. Он полностью исчезает после того, как ваш код скомпилирован и связан.
Вы можете попробовать переименовать свои функции / переменные, и ваш исполняемый файл будет таким же (за исключением изменяемых вещей, которые может поставить компилятор, таких как дата / время сборки, идентификатор отладочной информации и т. Д.)
Также попробуйте открыть файл исполняемый файл с каким-нибудь редактором и ищите имя функции. Скорее всего, вы его не найдете.
Однако вы можете добавить некоторые программные «украшения», которые помогут вам узнать имя вашей функции во время выполнения.
Вы не можете получить имя функции в C ++, но вы можете распечатать указатель и позже проверить двоичный файл (если он не удален) на предмет имени функции. Подпись может быть напечатана точно так же, как и вы, только имя типа не является «читаемым человеком». Проверьте документацию вашего компилятора, чтобы узнать, что означает вывод вашего кода. В g ++ вывод будет PFvfE
, что я не понимаю полностью, но идентифицирует указатель ( P
) на функцию ( F
), возвращающую void ( v
) и использование числа с плавающей запятой ( f
) в качестве единственного аргумента. Не спрашивайте меня, что такое E
...
(у меня сейчас нет времени проверять документацию, я просто поигрался с программой-образцом, чтобы догадаться, что: печатать разные сигнатуры функций)