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;