Цитата(Сергей Борщ @ Mar 6 2009, 23:08)

Я тоже. Использовал указатели на функции-члены только однажды, и мне удалось. Насколько я понимаю, вы не передаете имя объекта класса SIM300, для которого нужно вызвать функцию-член.
Я делал, тоже для SIM300

Вид такой:
Код
struct TATCommand
{
unsigned short int timeOut; ///< timeout in seconds
unsigned short int maxRetries;
const char* theCommand; ///< AT command cstring
void (TGsmParser::*reqOK)(const char*); ///< function to call if request completed
void (TGsmParser::*doReq)(const char*); ///< function to call to invoke command
void (TGsmParser::*retrExceeded)(); ///< function to call if all retries failed
};
TATCommand *atCommand; /// pointer to curent structure
TATCommand basicATCommand[NumBasicATCommand]; ///< base config, imei, phonebook and SMS commands @todo add getImsi
TATCommand gprsATCommand[NumGPRSATCommand]; ///< GPRS and TCP handling
Вызов происходит так:
Код
this->*atCommand[lastRequest].reqOK)(...);
Уродливо.
Потом плюнул на это, и переписал через иерархию классов с виртуальными методами. Куда красивее вышло и меньше путаницы.
Код
class TAtCommand
{
public:
TAtCommand();
// Instantiated functions
virtual const char* getCommand() const = 0;
virtual unsigned int getTimeoutS() const;
virtual unsigned int getMaxRetries() const;
virtual unsigned int getPauseMs() const;
virtual int doParseSetResult( char* data, int len ) const;
virtual int doParseRequestResult( char* data, int len ) const;
virtual void doHandleRetriesExceeded() const;
virtual void doHandleTimeoutExceeded() const;
bool canDoCommandRetry( const TAtCommand *commandToCheck ) const;
int doReqest() const; ///< return: -1 wrong write, >=0 size writen data
virtual int doSet( const char * value = 0 ) const; ///< if overriden may provide different data
void doDelayAndSetTimeout() const;
static void clearReqSet();
static ATCOMMAND_RESULT getStandardResult( char* data, int len, char &reslen );
static void checkTimeout();
static int tryProcessAnswer( char* buf, int len, int lookPos );
protected:
friend class TmsgRdy;
static const char *currSetValue;
static const TAtCommand *lastReqest;
static const TAtCommand *lastSet;
static portTickType globTimeout;
static unsigned short retries;
static TGenericGsm *gsm;
static unsigned short lastError;
};