在C 中自动生成函数签名

Generate function signature automatically in c++

本文关键字:函数 自动生成      更新时间:2023-10-16

我在生成函数的问题上遇到了乏味,复制和粘贴,我拥有大约400个功能。自动生成它们的最简单方法是什么?
我希望只键入icontroller.h,其余的人将自动填充,如果有人可以将我引导到这样的东西。

我有4个单独的文件。

IController.h
Controller.h
Controller.cpp
MockController.h

例如,在IController.h文件中,我有一个称为display

的函数
class IController
{
 public:
 virtual void display(Gui* gui) = 0; 
}

Controller类将从 IController继承,而关键字virtual被删除,= 0。

class Controller : public IController
{
  public:
  void display(Gui* gui);
}

Controller.cpp将包含定义

void Controller::display(Gui* gui)
{
}

最后MockController.h将包含以下

class MockController : public IController
{
 public:
  MOCK_METHOD1(display, void(Gui* gui));
};

花了我几天的时间来弄清楚事情,希望这有助于我设法通过我在下面显示的脚本解决了上述问题。gmock_gen.py当前不使用Python 3.7.2,我安装了2.7.13,下面的脚本工作。

用户只需要为第一个接口类生成代码,并且所有其他文件都是自动化的。

import os
#read contents of IController.h
filename = "IController.h"
file = open(filename,"r")
#variables
flag = False
classheader = ""
mockheader = ""
classbody = None
header = []
classitems = []
#read each line in the file
for line in file:
    # if the class name has been found 
    if(filename[:-2] in line):
        flag = True
    # save all data before the calss name
    if flag == False:
        header.append(line)
    #
    if filename[:-2] in line:
        flag = True
        classname = filename[1:-2]
        line = line.replace("class ", "public ")
        classbody = "class " + classname + " : " + line
    # remove virtual = 0
    if "virtual" in line:
        line = line.replace("virtual","")
        line = line.replace(" = 0","")
        classitems.append(line)
classbody += "n"
classbody += "{n"
classbody += "  public:n"
for x in classitems:
     classbody += x 
     classbody + "n"
classbody += "};"
for x in header:
    classheader += x
classheader += "#include " + """  + filename + """ + "nn"
mockheader += classheader
classheader += classbody
#create controller.h file
f = open(filename[1:], "w")
f.write(classheader)
cppbody = ""
for x in classitems:
    temp = x.split(" ", 2)
    temp2 = temp[1] + " " + filename[1:-2] + "::" + temp[2].replace(";","{nnn}n")
    cppbody += temp2 
#create controller.cpp file
cppfilename = filename[1:-2] + ".cpp"
f = open(cppfilename,"w")
f.write(mockheader)
f.write(cppbody)

mocktemp = "Temp" + filename[1:]
mockfilename = "Mock" + filename[1:]
input = "python gmock_gen.py " + filename
os.system(input + " > " + mocktemp)
#create MockIController.h
with open(mocktemp) as f:
    with open(mockfilename, "w") as f1:
        f1.write(mockheader)        
        for line in f:
            f1.write(line)