今天在寫一個通用框架,要實現一個註冊類定義的時候,實現自動全局註冊。 一般人們都得通過定義一個實例來完成,這裏用了一小技巧,用static 由於static定義的變量是放在全局的內存區,在程序啓動的時候就會先回對這塊程序初始化,那麼就寫一個函數,這個函數裏面寫上註冊函數,然後讓該函數實現自己的功能,但是用這個函數初始化這個static變量。---------------其實就是一個字 static 會在程序啓動前初始化,所以我們可以通過這個初始化來實現自己的初始化函數
map<INT32,TestInfo*> g_mapTestCase;
bool MakeRegisterFunc(TestInfo* class_name)
{
int currentTypeID = 0;
TestInfo* t = (TestInfo* )class_name;
map< INT32,TestInfo*>::iterator ibeg = g_mapTestCase.begin();
//strcat(test_name,test_case_name);
//TestInfo *t = new TestInfo();
g_mapTestCase.insert(make_pair(currentTypeID,t));
return true;
}
#define GTEST_TEST(test_case_name,test_name)\
class GTEST_TEST_CLASS_NAME(test_case_name,test_name) : public TestInfo\
{\
public:\
GTEST_TEST_CLASS_NAME(test_case_name,test_name)(){};\
public:\
virtual void TestBody();\
/*a beautify butterfly*/static bool funny;\
};\
GTEST_TEST_CLASS_NAME(test_case_name,test_name)* tinfo =\
new GTEST_TEST_CLASS_NAME(test_case_name,test_name);\
bool GTEST_TEST_CLASS_NAME(test_case_name, test_name)::funny\
= MakeRegisterFunc(tinfo);\