QT5學習::(轉)c++ get與set方法的巨集定義實現
阿新 • • 發佈:2018-12-24
c++ get與set方法的巨集定義實現
轉自:https://blog.csdn.net/Scythe666/article/details/48846761
一、文章來由
專案中需要用到 get 和 set 方法,但是問題來了,因為是 c++ 的,並不像 java 的 eclipse 有自動生成 get 和 set 方法。如果手寫是可以,但是當屬性特別多的時候會非常麻煩。。。但是巨集定義方法可以搞定這個問題~~
二、具體程式碼
2.1 非指標型別成員變數
// PropertyBuilderByName 用於生成類的成員變數 // 並生成set和get方法 // type 為變數型別 // access_permission 為變數的訪問許可權(public, priavte, protected) #define PropertyBuilderByName(type, name, access_permission)\ access_permission:\ type m_##name;\ public:\ inline void set##name(type v) {\ m_##name = v;\ }\ inline type get##name() {\ return m_##name;\ }\
分析:
可以這樣寫的原因就是因為 #define 預處理,是在編譯器編譯之前執行的純字串替換,這裡的 ##name 會直接被替換成傳入的 name,所以該巨集生成成員變數 m_name 由 name 決定,其訪問許可權由 acess_permission 指定
另外:
`#define語句中的#是把引數字串化,##是連線兩個引數成為一個整體。
2.2 指標型別成員變數
同樣的道理:
#define PointerPropertyBuilderByName(type, name, access_permission)\ access_permission:\ type* m_##name;\ public:\ inline void set##name(type* v){\ m_##name = v;\ }\ inline type* get##name(){\ return m_##name;\ }\
2.3 test
class Test { PropertyBuilderByName(int, A, private) PointerPropertyBuilderByName(double, DBV, private) }; int main() { Test t; t.setA(10); cout << "A = " << t.getA() << endl; double a = 12.3445; t.setDBV(&a); cout << "DBV: " << *(t.getDBV()) << endl; system("pause"); return 0;