如何使用成員函式指標
很長時間沒有用過C++了,今天一位同事問我關於成員函式指標的問題。想了想,還是N年前用過一次,之後再也沒有用過,印象不太深了。查了些資料,總終於想起來了,寫一個例子在這裡,以供以後查閱吧。
//build: gcc -g -lstdc++ mfp.cpp -o mfp.exe
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
class CmdParaParser
{
public:
CmdParaParser();
~CmdParaParser();
public:
bool Parse(int argc, char* argv[]);
int GetWidth(void) const;
int GetHeight(void) const;
private:
bool ParseWidth(const char* value);
bool ParseHeight(const char* value);
private:
int m_nWidth;
int m_nHeight;
};
CmdParaParser::CmdParaParser()
{
m_nWidth = m_nHeight = 0;
return;
}
CmdParaParser::~CmdParaParser()
{
return;
}
bool CmdParaParser::Parse(int argc, char* argv[])
{
int i = 0;
int j = 0;
typedef bool (CmdParaParser::*ParamHandler)(const char* value);
struct KeyAndHandler
{
char* pszKey;
int nKeyLength;
ParamHandler Handler;
}
KeyAndHandlers[] =
{
{"--width=", sizeof("--width=") - 1, &CmdParaParser::ParseWidth},
{"--height=", sizeof("--height=") - 1, &CmdParaParser::ParseHeight},
{NULL, 0, NULL}
};
for(i = 1; i < argc; i++)
{
for(j = 0; KeyAndHandlers[j].pszKey != NULL; j++)
{
if(strncmp(argv[i], KeyAndHandlers[j].pszKey, KeyAndHandlers[j].nKeyLength) == 0)
{
ParamHandler Handler = KeyAndHandlers[j].Handler;
(this->*Handler)(argv[i] + KeyAndHandlers[j].nKeyLength);
break;
}
}
}
return m_nWidth != 0 && m_nHeight != 0;
}
int CmdParaParser::GetWidth(void) const
{
return m_nWidth;
}
int CmdParaParser::GetHeight(void) const
{
return m_nHeight;
}
bool CmdParaParser::ParseWidth(const char* value)
{
m_nWidth = atoi(value);
return true;
}
bool CmdParaParser::ParseHeight(const char* value)
{
m_nHeight = atoi(value);
return true;
}
int main(int argc, char* argv[])
{
if(argc != 3)
{
printf("Usage: %s --width=n --height=n/n", argv[0]);
}
else
{
CmdParaParser aCmdParaParser;
aCmdParaParser.Parse(argc, argv);
printf("width=%d height=%d/n", aCmdParaParser.GetWidth(), aCmdParaParser.GetHeight());
}
return 0;
}
相關文章
- 函式指標使用c++類成員函式函式指標C++
- [C++] 成員函式指標和函式指標C++函式指標
- C++ 成員資料指標成員函式指標簡單測試C++指標函式
- c++智慧指標中的reset成員函式C++指標函式
- C++ 成員函式指標簡單測試C++函式指標
- 淺談C++指標直接呼叫類成員函式C++指標函式
- 指標函式 和 函式指標指標函式
- 如何使用函式指標呼叫類中的函式和普通函式函式指標
- 成員變數/函式指標的用法 (轉)變數函式指標
- 為什麼 C++ 中成員函式指標是 16 位元組?C++函式指標
- 成員方法的this指標指標
- 函式指標函式指標
- C++ 類成員指標C++指標
- C++的成員指標C++指標
- 【不在混淆的C】指標函式、函式指標、回撥函式指標函式
- 函式名/函式地址/函式指標函式指標
- 宣告與函式、函式指標函式指標
- 函式指標呼叫函式指標
- 函式指標&回撥函式Callback函式指標
- c++ 函式指標C++函式指標
- 關於函式指標函式指標
- 指向函式的指標函式指標
- C++(函式指標)C++函式指標
- 函式指標基礎函式指標
- 成員函式的說明和使用(轉)函式
- typedef void (*Fun) (void) 的理解——函式指標——typedef函式指標函式指標
- C語言函式指標與回撥函式使用方法C語言函式指標
- typedef使用大全3(指向函式的指標) (轉)函式指標
- Rust中的函式指標Rust函式指標
- vector中存放函式指標函式指標
- 函式指標淺談 (轉)函式指標
- C語言 函式指標C語言函式指標
- cpp:"函式指標"的方法函式指標
- 函式指標練習題函式指標
- C++中函式指標與函式物件C++函式指標物件
- 引入const成員函式函式
- C++ 類成員函式C++函式
- 都是指標資料成員“惹的禍”指標