Возможна ли подобная конструкция, и если возможна, то где ошибка в моей реализации?
template <typename TExecuter>
class TCommand
{
public:
typedef int (TExecuter::*Action)(void*);
TCommand(TExecuter* pExecuter, Action pfnAction)
: m_pExecuter(pExecuter)
, m_pfnAction(pfnAction) { }
private:
TExecuter* m_pExecuter;
Action m_pfnAction;
public:
virtual int Execute(void* pvParam)
{ return (m_pExecuter->*m_pfnAction)(pvParam); }
};
class CCommand
{
public:
virtual int Execute(void* pvParam) { return 0; }
};
class CReceiveFile : public CCommand
{
public:
int Execute(void* pvParam)
{
char* szParam = static_cast<char*> (pvParam);
int iLen = strlen(szParam);
for(int i=0, j=iLen-1; i<iLen/2; i++, j--)
{
szParam[i] = szParam[i] ^ szParam[j];
szParam[j] = szParam[j] ^ szParam[i];
szParam[i] = szParam[i] ^ szParam[j];
}
return iLen;
}
private:
// На что повлияет введение этой переменной?
HANDLE m_hFile;
};
class CProtocol
{
public:
enum ECommads
{
Command = 1,
Server,
Client,
Request,
Answer,
File
};
private:
ECommads m_eCommands;
TCommand<CCommand>* m_pCommand;
public:
CProtocol() : m_eCommands(File), m_pCommand(NULL) { }
~CProtocol() {}
int Process(void* pvBuffer)
{
switch(m_eCommands)
{
Server:
break;
Client:
break;
Request:
break;
Answer:
break;
File:
// здесь траблы с типами, что я делаю не так?
m_pCommand = reinterpret_cast<TCommand<CCommand>*>
((new CReceiveFile()), (&CReceiveFile::Execute));
break;
}
// Безопасен ли этот вызов?
return m_pCommand->Execute(pvBuffer);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
char szTest[] = "abcdefg";
CProtocol* pProtocol = new CProtocol();
pProtocol->Process(szTest);
}
Мой компьютер прогоняет бесконечный цикл за 9 секунд, но, мне кажется, он мог бы сделать это быстрее...