gpt4 book ai didi

c++ - 如何打印作为参数传递的函数的名称?

转载 作者:太空狗 更新时间:2023-10-29 19:45:15 32 4
gpt4 key购买 nike

在下面的代码中,我希望 Benckmark 打印传入 Benchmark 的仿函数的名称。

#include<iostream>
using namespace std;

// You can only modify Benchmark
template<typename F>
void Benchmark(F f)
{
f();

// print the name to which f() refers.
}

// A cannot be modified
void A(int x)
{

}

void main()
{
int x = 1;
Benchmark([&]() {A(x); }); // should only print "A" rather than "[&]() {A(x); }"
}

最佳答案

在 C++ 中真的没有一种方法可以进行这种反射(至少在编写本文时)。您可以做的最好的事情是使用包装器宏,它获取您传递的标记序列,从中创建一个字符串,并将它与一些更有用的数据一起传递给 real 函数。

#define Benchmark(...) BenchmarkImpl(__VA_ARGS__, #__VA_ARGS__, __FILE__, __LINE__)

template<typename F>
void BenchmarkImpl(F f, char const* name, char const* file, unsigned long long line)
{
f();
std::cout << "ran " << name << "(" << file << ", line " << line << " )";
}

运行上面的代码on wandbox , 打印:

ran [&]() {A(); } (prog.cc, line 19 )

关于c++ - 如何打印作为参数传递的函数的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55688615/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com