我想创建一个宏(获取行号、函数名和文件名),然后将这些东西转发给另一个函数,但该函数必须是私有的,但问题是我不能在宏中使用私有函数。
例如,假设这个 C++ 类在我的头文件中:
class Temp
{
private:
void foo(string function, string file, int line)
{
// Do something...
}
#define func() foo(__FUNCTION__,__FILE__,__LINE__)
}
然后在执行之后,错误出现了 foo 不可访问,这很明显,但是我能做些什么吗?喜欢使用 Friend 关键字或其他什么?
这样做的目的是,当发生异常(用户定义)时,我想打印发生异常的行号,并且我不希望用户使用 foo 函数,这就是它私有的原因。我发现您可以使用宏将行号传递给其他函数。另外,假设我的头文件中存在临时类。而且,我正在使用另一个 C++ 文件中的宏函数。
任何帮助将不胜感激。
编辑: 似乎上面的解释不太好解释我需要什么,我想要的是,我创建了我的头文件,我在其中创建了一个类,其中的函数很少,但是有一个函数有相当多的机会抛出异常,当我通过包含头文件来使用该函数时,我想知道在哪一行,在哪个函数中发生了异常,这就是为什么我要创建该函数的宏name 然后扩展为另一个函数,该函数还有三个参数(函数、文件和行),但我不希望用户使用这个其他函数,因为这些参数并不是我函数的一部分,它们只是打印错误. 所以,这就是为什么我将这个函数保持为私有,这样用户就无法访问它。我不一个类的私有函数与否?
我对此进行了很多搜索,我认为这是不可能的。但也许我错过了什么?
或者,如果这是不可能的,那么还有其他方法可以打印调用函数的行号,因为如果使用__LINE__
它将打印该行号,而不是调用函数的行号。例如,假设有一个函数 fun() 在第 5 行有一个代码ascout<<__LINE__<<endl;
并且我在第 15 行从 main 调用这个函数 fun() ,但是当它被调用时,它会打印 5,这不是错了,但我不想打印 5,我想在调用函数的地方打印 15。所以,如果有任何其他方法可以实现这一点,请告诉我。