CERN

时间:2017-12-01 11:27:00

标签: c++ root-framework

以下是代码的示例,其中我定义了(第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

但遗憾的是,这并不起作用。

1 个答案:

答案 0 :(得分:2)

在C中,有标准预定义标识符__func__,其中包含当前函数的名称。

file=Form("%s.txt", __func__); //line 4

应该这样做。

由于您还使用C ++标记,如果我从C ++ 11开始正确理解,这将为您提供函数的错位名称。

gcc有一个扩展名__PRETTY_FUNCTION__,它为您提供了解码名称和参数类型。