在C 中自动生成函数签名
Generate function signature automatically in c++
我在生成函数的问题上遇到了乏味,复制和粘贴,我拥有大约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)
相关文章:
- 我可以说服自动生成的构造函数将我的 POD 类成员归零吗?
- 删除了所有自动生成的构造函数/运算符的类仍然可以从函数返回吗
- C++自动生成的具有常量和非常量引用的复制构造函数
- 移动构造函数是自动生成的,即使成员没有移动构造函数?
- 在C 中自动生成函数签名
- 如何避免丢失自动生成的初始化列表构造函数
- SFINAE不适用于自动生成的特殊成员函数
- 有可能在C++中自动生成析构函数吗
- 自动生成的移动构造函数导致非法行为
- 自动生成移动构造函数
- 只有当类具有指针成员时,Visual Studio才会自动生成函数
- 如何自动生成 c/c++ 函数原型
- C++自动生成带有用户声明析构函数的移动构造函数
- 识别自动生成的成员函数
- 如何知道特殊成员函数实现编译器自动生成
- 在c++ 11中,当类没有任何构造函数时,自动生成类成员函数
- move构造函数是自动生成的
- 用于类自动生成序列化函数的宏
- 自动生成带有不可移动成员的移动构造函数
- C++中的构造函数自动生成