gpt4 book ai didi

c++ - 记录 C++ 类方法调用者(函数名、行号)

转载 作者:太空宇宙 更新时间:2023-11-04 12:56:17 25 4
gpt4 key购买 nike

我的 C++ 代码中有一个类似于以下的类:

class myClass
{
public:
void method1(int a, int b, std::string str);
};

其他类可以从myClass实例化一个对象并调用method1。

void caller()
{
obj1->method1(12, 4, "sample");
}

我想记录 myClass 的所有调用者(函数名、文件名、行号)。一种可能的解决方案是:

class myClass
{
public:
method1(int a, int b, std::string str, const char *_function = __builtin_FUNCTION(), const char *_file = __builtin_FILE(), int _line = __builtin_LINE());
};

它使用 __builtin_xxx 作为默认参数。该解决方案有多个缺点:

  1. 这是一个丑陋的解决方案
  2. __builtin_xxx 仅适用于 > 4.8 的 gcc 版本
  3. 我们必须向 method1 添加三个默认参数
  4. IDE 显示自动完成的默认参数,这些参数不应该由用户提供!

另一种解决方案是使用__LINE____FILE____func__,这与之前的解决方案基本非常相似。它们没有在函数范围之外定义,应该这样使用:

void caller()
{
obj1->method1(12, 4, "sample", __func__, __FILE__, __LINE__);
}

Here是两种解决方案的工作示例。

当用户在 myClass 对象上调用 method1 时,是否有任何更好 的解决方案来记录调用者。通过更好的解决方案,我的意思是不通过添加另外三个参数来更改方法 1 的声明!

最佳答案

另一个丑陋的解决方案,但我正在使用...

使用宏自动添加__LINE__ __FILE__ ...等。东西变成参数。

例如

#define Method(param0,param1) Method(param0,param1,__LINE__)

它有很多问题,如果你想让宏像正常功能一样工作,你必须做很多事情,而且它仍然可能无法工作。

我用它来帮助我记录错误。

关于c++ - 记录 C++ 类方法调用者(函数名、行号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46509281/

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