Как получить исходное местоположение из функции в качестве аргумента без использования статической функции-члена `current`?
Я хочу свою функцию
get_source
вернуть
std::source_location
type, взяв в качестве аргумента другую функцию.
Например, у меня есть функция с именем
helloMessage
а также
sumOf
со следующими типами аргументов и типом возвращаемого значения:
void helloMessage(const char* message);
int sumOf(int num1, int num2);
И, предположительно, у меня есть функция, которая получит исходное местоположение из объекта функции, а затем вернет его значение:
template <typename function_t>
std::source_location get_source(function_t func);
Вход:
auto info_1 = get_source(helloMessage);
auto info_2 = get_source(sumOf);
std::cout
<< "info_1: " << info_1.function_name() << '\n'
<< "info_2: " << info_2.function_name() << '\n';
Это мой ожидаемый результат:
void helloMessage(const char*)
int sumOf(int, int)
Как я могу этого добиться?
1 ответ
всегда является первоисточником любого объекта.
source_location
это серьезно о том, что расположение в источнике коды, созданной этот объект. Так серьезно на самом деле , что даже в макроподстановках ,
source_location::current
вернет расположение макроса, а не кода, который вызвал макрос.
Таким образом, нет никакого способа превратить функцию в то место в источнике, откуда она пришла. Нет, если этот функциональный объект не сохранил где-нибудь исходное местоположение этой функции, что было бы довольно сложно.