如何在不使用静态成员函数`current`的情况下从函数中获取源位置作为参数?
How to get a source location from the function as argument without using static member function `current`?
我想通过将另一个函数作为参数将我的函数 get_source
转换为 return std::source_location
类型。
例如,我有一个名为 helloMessage
和 sumOf
的函数,具有以下参数类型和 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
认真 关于创建该对象的代码在源代码中的位置。
因此无法将函数转换为它在源代码中的位置。除非那个函数对象已经在某个地方存储了那个函数的源位置,这将是相当困难的。
我想通过将另一个函数作为参数将我的函数 get_source
转换为 return std::source_location
类型。
例如,我有一个名为 helloMessage
和 sumOf
的函数,具有以下参数类型和 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
认真 关于创建该对象的代码在源代码中的位置。
因此无法将函数转换为它在源代码中的位置。除非那个函数对象已经在某个地方存储了那个函数的源位置,这将是相当困难的。