Как получить исходное местоположение из функции в качестве аргумента без использования статической функции-члена `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 вернет расположение макроса, а не кода, который вызвал макрос.

Таким образом, нет никакого способа превратить функцию в то место в источнике, откуда она пришла. Нет, если этот функциональный объект не сохранил где-нибудь исходное местоположение этой функции, что было бы довольно сложно.

Другие вопросы по тегам