平時苦於寫一下C++類或數據結構時時,每個類都需要四五個與類相關的構造、析構函數。每次重復的寫些類名和變量名,費時費力。若將這些函數省略,代碼風格不好,又不安全。
經常見一些代碼生成工具,只需定義類名,變量,函數,就能生成比較完善的代碼。格式統一,漂亮且安全。不過這些工具都與自己的框架或編譯系統相關,通用性不是很好。
最近想學習下python的應用,就嘗試自己寫一個簡單的Class代碼生成器。按照一般的思路:設計漂亮易用的界面,生成類型定義的xml或其他格式的數據文件,然後再翻譯成代碼。這個工作量和設計復雜程序對我這個python新手短時間內是不可能的。按照2/8原則,設計一個最簡單易用的界面,盡可能的完成一些重復性的勞動。
期望的 工具使用方式:
只需在一個文本文件,如declare.txt中,第一行寫入類名,然後以下每行寫入 類型名和變量名即可。
生成的代碼,包括類的聲明和各種構造和析構函數。
如:declare.txt文件中
Test
int a
float b
string c
需要生成的目標代碼:
class Test
{
Test();
Test(int _a, float _b, const string &_c);
Test(const Test &rhs);
Test& operator = (const Test &rhs);
~Test();
public: // private:
int a;
float b;
string c;
};
Test::Test()
: a()
, b()
, c()
{
}
Test::Test(int _a, float _b, const string &_c)
: a(_a)
, b(_b)
, c(_c)
{
}
Test::Test(const Test &rhs)
{
*this = rhs;
}
Test& Test::operator = (const Test &rhs)
{
if (&rhs != this)
{
a = rhs.a;
b = rhs.b;
c = rhs.c;
}
return *this;
}
Test::~Test()
{
}