2017-07-18 33 views
-1

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

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

+1

你用什么IDE? –

+0

搜索单词'class',然后获取它的名字并在'{'具有相同名称后查找函数? –

+0

问题是如果你也应该找到现有的构造函数或者只是用户定义的构造函数。每当你声明结构r类,你创建一个构造函数,除非你明确地删除它。 – Swift

回答

0

搜索所有类的名称,然后找到该函数具有类名相同的名称。第二种选择是,因为我们知道构造函数总是公开的,所以搜索词public并找到构造函数。

+0

'public'关键字可能不会出现,函数在结构体中默认为public。你的第一个建议可能会起作用。 –

+0

好的没有其他办法可以找到所有的构造函数。 – Talal

+0

构造函数并不总是公开的。 –

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! 

我没有测试它,我做到了相当快,并试图简化旧的代码,所以很多东西都没有支持,比如嵌套类。 从那以后,你可以做一个脚本来查找目录中的每个标题,并使用你喜欢的结果!

+0

我可以试试这个,但它会为类(子类)内的类工作吗? – Susanth

+0

使用我发布的,不,它不处理它们(子类==内部类),但你可以推广它来处理它们,通过添加一个堆栈来跟踪你的深度。 – hogo

相关问题