懶人的 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以外,還可以用在別的地方。可以改變函式名字、變數還有資料型態,超方便的啦!
留言
張貼留言