C++ 如何从函数中获取源位置作为参数,而不使用静态成员函数“current”?

C++ 如何从函数中获取源位置作为参数,而不使用静态成员函数“current”?,c++,c++20,std-source-location,C++,C++20,Std Source Location,我希望我的函数get_source通过将另一个函数作为参数来返回类型 例如,我有一个名为hellomemessage和sumOf的函数,其参数类型和返回类型如下: void helloMessage(const char* message); int sumOf(int num1, int num2); 假设我有一个函数,它将从函数对象获取一个源位置,然后返回它的值: template <typename function_t> std::source_location get_

我希望我的函数
get_source
通过将另一个函数作为参数来返回类型

例如,我有一个名为
hellomemessage
sumOf
的函数,其参数类型和返回类型如下:

void helloMessage(const char* message);
int sumOf(int num1, int num2); 
假设我有一个函数,它将从函数对象获取一个源位置,然后返回它的值:

template <typename function_t>
std::source_location get_source(function_t func);

如何实现这一点?

源位置::当前始终是任何
源位置
对象的最终源
source\u location
对于作为创建该对象的代码的源代码中的位置是认真的。事实上,即使在宏扩展中,
source\u location::current
也会返回宏的位置,而不是调用宏的代码的位置


因此,无法将函数转换为其来源的源中的位置。除非该函数对象已将该函数的源位置存储在某个位置,否则将很困难。

在该语言中,无法从函数指针获取函数名。您可以将该函数作为模板参数传递,并通过
std::type_info
更进一步,或者使用特定于平台的回溯库。请查看Jason Turner关于主题的精彩视频,以获取适当的示例。
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)