[C++] 使用 typedef 簡化函式指標定義
阿新 • • 發佈:2019-01-09
函式型別由返回型別和引數列表決定,與函式名無關:
// pf 指向一個返回bool,且有兩個const string& 型別引數的函式,*pf 必須用括號括起來,否則會變成函式宣告
bool (*pf)(const string &, const string &);
由於函式指標型別容易變得笨拙,因此用 typedef 關鍵字簡化定義,使函式指標易於使用:
typedef bool (*cmpFcn)(const string &, const string &);
cmpFcn 為一個函式指標型別的名稱。
函式名可當成指標,函式引數型別可以是可以是函式(會被自動當成函式指標)或者函式指標。函式可以返回函式指標型別,但不能返回函式型別。
// ff 為函式名,引數為 int,返回型別為 int (*)(int*, int) 的函式指標,讀函式指標的最佳方法是從內到外。
int (*ff(int))(int*, int);
一段code:
《C++ Primer 7.9》class SUITEK_CTest; class SUITEK_CTestClassInfo; typedef SUITEK_CTest* (*pmTestFactory)(); typedef void (*pmTestParams)( SUITEK_CTestClassInfo* pHead ); class SUITEK_CTestClassInfo { public: SUITEK_CTestClassInfo( pmTestFactory pmFactory, //ptr to (static) method which ctors a test pmTestParams pmParams, //ptr to (static) method which builds parameter list const char * pName, //test class name const char * pVersion, //version string short wClassAttributes = 0 ); //test class attributes: see attrFlags above virtual ~SUITEK_CTestClassInfo(); void SetDescription (const char * strDescription); const char * GetDescription() const; const char * GetName() const; void DestroyTest( SUITEK_CTest *& pTest ); SUITEK_CTest * CreateTest(); //.... typedef std::map<std::string, SUITEK_Parameter> TestParameterInfo; const TestParameterInfo * GetParametersInfo() const; private: std::string mName; std::string mVersion; std::string mDescription; pmTestFactory mFactory; pmTestParams mParams; TestParameterInfo mTestParamInfo; std::map<unsigned long, SUITEK_CTest*> mTstObjRef; }; SUITEK_CTestClassInfo::SUITEK_CTestClassInfo( pmTestFactory pmFactory, pmTestParams pmParams, const char * pName, const char * pVersion, short wClassAttributes ) : mName(pName), mVersion(pVersion), mDescription(""), mFactory(pmFactory), mParams(pmParams) { mParams(this); // Call CreateParams SUITEK_Registry::GetInstance()->RegisterTest(this); }