懶人的 set 和 get 函式

懶人的 set 和 get 函式

每次在寫 class 時一定會遇到這樣的事

//test.h
class CTest
{
private:
int m_nValue;
int m_nValue2;
char m_szName[256];
public:
CTest();
//這堆set和get真的很刺眼
void SetValue(int n){m_nValue = n;}
void SetValue2(int n){m_nValue2 = n;}
void SetName(char *sz){strcpy(m_szName, sz);}

int GetValue(){return m_nValue;}
int GetValue2(){return m_nValue2;}
char *GetName(){return m_szName;}
};

這堆 set 和 get 真的很刺眼,明明就是差不多的東西。

還好在公司裡看到特殊的用法,只是我不知道這種用法有沒有名字。

//test.h
#define DECLARE_GET_FUNCTION(func_name, var_type, var_name)\
var_type Get##func_name##()\
    {\
        return this->var_name;\
    }

#define DECLARE_SET_GET_FUNCTION_STR(func_name, var_type, var_name)\
void Set##func_name##(var_type  var_name) \
    { \
memcpy((void *)this->var_name, (const void *)var_name, sizeof(this->var_name));\
    }\
DECLARE_GET_FUNCTION(func_name, var_type, var_name)

#define DECLARE_SET_GET_FUNCTION_INT(func_name, var_type, var_name)\
void Set##func_name##(var_type  var_name) \
    { \
this->var_name = var_name; \
    }\
DECLARE_GET_FUNCTION(func_name, var_type, var_name)

class CTest
{
private:
int m_nValue;
int m_nValue2;
char m_szName[256];
public:
CTest();
//用這個define來宣告函式
DECLARE_SET_GET_FUNCTION_INT(Value, int, m_nValue);
DECLARE_SET_GET_FUNCTION_INT(Value2, int, m_nValue2);
DECLARE_SET_GET_FUNCTION_STR(Name, char *, m_szName);
};


 

不是很好懂,但是宣告的 define 可以放在 .h 裡。這樣就不會有一堆長的很像又佔位子的函式了。而且全部的 class 都可以用喔!

主程式就照平常那樣用就可以了。

//main.cpp
int main()
{
CTest *pTest = new CTest;

cout<<pTest->GetName()<<endl;
cout<<pTest->GetValue()<<endl;
cout<<pTest->GetValue2()<<endl;

pTest->SetName("123456");
pTest->SetValue(60);
pTest->SetValue(30);

cout<<pTest->GetName()<<endl;
cout<<pTest->GetValue()<<endl;
cout<<pTest->GetValue2()<<endl;

delete pTest;
system("pause");
return 0;
}


除了class以外,還可以用在別的地方。可以改變函式名字、變數還有資料型態,超方便的啦!

留言

這個網誌中的熱門文章

MSVC 與 CRT 之間的恩怨情仇

EXCEL VBA

演員筆記