以下是代码的示例,其中我定义了(第1行)稍后要使用的函数的名称(第4行)。
char *funcname = "addition"; //line 1
void addition(){ //line 2
//file=Form("%s.txt",funcname);
TFile *ofile = new TFile(Form("%s.root",funcname) ,"RECREATE");//line 4 //EDIT
}
现在我的问题是:如何使用类似Form("%s",funcname)
之类的代码直接在第4行中声明函数名称,而不需要第1行通过以某种方式恢复函数名称,或更改第2行函数名称,如上例所示?
例如,我试图改变我的第2行代码:
void Form("%s",funcname)(){
}
但从技术上讲,这意味着:
void "addition"(){
}
而不是这个:
void addition(){
}
我不想要引号。那么解决方案是什么?
编辑:
上面的代码行将位于名为addition.C
的文件中,并通过在终端中运行命令addition.root
来生成名为root addition.C
的文件。
我正在尝试使用第4行中的代码获取输出,但每次在第2行更改函数名称时都会使用不同的输出文件名。这样我就不会覆盖之前生成的输出,当我使用不同的名称运行文件时会给我一些输出文件。
我的问题是否足够明确?我认为这是一个合理的问题,并且在如此短的时间内没有期待这么多的投票!欢迎任何建议进行更多编辑。
编辑2: 动态更改函数名称可能不像人们在评论中建议的那样。然后解决方案应该是以某种方式(自动)获取函数名称,就像
一样 TFile *ofile= new TFile(Form("%s.root", __func__), "RECREATE"); //line 4
但遗憾的是,这并不起作用。
答案 0 :(得分:2)
在C中,有标准预定义标识符__func__
,其中包含当前函数的名称。
file=Form("%s.txt", __func__); //line 4
应该这样做。
由于您还使用C ++标记,如果我从C ++ 11开始正确理解,这将为您提供函数的错位名称。
gcc有一个扩展名__PRETTY_FUNCTION__
,它为您提供了解码名称和参数类型。