如何在不使用静态成员函数`current`的情况下从函数中获取源位置作为参数?

How to get a source location from the function as argument without using static member function `current`?

我想通过将另一个函数作为参数将我的函数 get_source 转换为 return std::source_location 类型。

例如,我有一个名为 helloMessagesumOf 的函数,具有以下参数类型和 return 类型:

void helloMessage(const char* message);
int sumOf(int num1, int num2); 

假设我有一个函数可以从函数对象获取源位置,然后 return 它的值:

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)

我怎样才能做到这一点?

source_location::current 始终是任何 source_location 对象的最终来源。 source_location 认真 关于创建该对象的代码在源代码中的位置。

因此无法将函数转换为它在源代码中的位置。除非那个函数对象已经在某个地方存储了那个函数的源位置,这将是相当困难的。