如何在c ++代码中搜索所有构造函数?

时间:2017-07-18 04:00:19

标签: c++ constructor

我必须找到我的代码库中的所有构造函数(这是巨大的),有没有简单的方法(没有打开每个文件,阅读它并查找所有类)?我可以在grep中使用的任何语言特定功能吗?

要查找析构函数很容易,我可以搜索“〜”。 我可以编写一些代码来查找“::”并匹配右侧和左侧的单词,如果它们相等,那么我可以打印该行。 但是如果构造函数在类中(在H / HPP文件中),则缺少上述逻辑。

2 个答案:

答案 0 :(得分:0)

搜索所有类名,然后找到与类名相同的函数。第二个选项是,因为我们知道构造函数始终是公共的所以搜索单词public并找到构造函数。

答案 1 :(得分:0)

由于您正在考虑使用grep,我假设您希望以编程方式执行此操作,而不是在IDE中。 它还取决于你是在解析标题还是代码,我再假设你要解析标题。

我是用python做的:

inClass=False
className=""
motifClass=re.compile("class [a-zA-Z][a-zA-Z1-9_]*)")#to get the class name
motifEndClass=re.compile("};")#Not sure that'll work for every file
motifConstructor=re.compile("~?"+className+"\(.*\)")
res=[]
#assuming you already got the file loaded
for line in lines:
    if not inClass:#we're searching to be in one
        temp=line.match(class)
        if temp:
            className=res.group(1)
            inClass=True
    else:
        temp=line.match(motifEndClass)
        if temp:#doesn't end at the end of the class, since multiple class can be in a file
            inClass=False
            continue
        temp=line.match(motifConstructor)
        if temp:
            res.append(line)#we're adding the line that matched
#do whatever you want with res here!

我没有测试它,我很快就做了,并试图简化一段旧代码,因此不支持很多东西,比如嵌套类。 从那里,您可以编写一个脚本来查找目录中的每个标题,并根据您的喜好使用结果!