C++/クラス関数のチェーン

懐かしさ90%

懐かしさ90%

  • タグ:
  • タグはありません
/*
*/
#pragma once
#include <windows.h>
//
//Exeint(int)
//
struct LBLFunc {
typedef int (*PF)(void); //
PF pfunc; //
LBLFunc* next; //
virtual int Do(){ return pfunc(); }; //
LBLFunc::LBLFunc(){
pfunc = NULL;
next = NULL;
};
};
template<typename T> struct LBLMFunc : LBLFunc {
typedef int (T::*PMF)(void); //
PMF pmfunc; //
T* Class; //
LBLFunc* next; //
int Do(){ return (Class->*pmfunc)(); }; //
LBLMFunc(T* c, PMF pmf) : LBLFunc()
{
Class = c;
pmfunc = pmf;
next = NULL;
};
};
/*
*/
class LBLFuncRegister {
LBLFunc* fstFunc; //
LBLFunc* lstFunc; //
long m_Stacks; //
public:
LBLFuncRegister(int (*pfunc)(void));
~LBLFuncRegister();
enum{
MAX_FUNC = 1024 //1024
};
LPCVOID AddRegist(int (*pfunc)(void)); //()
//()
template<typename T>
LPCVOID AddRegist(int (T::*pmfunc)(), T* c)
{
LBLFunc* pLBLfunc = new LBLMFunc<T>(c,pmfunc);
pLBLfunc->next = NULL; //
lstFunc->next = pLBLfunc; //
lstFunc = pLBLfunc; //
return pLBLfunc;
};
void DelAll(); //
bool DelRegist(LPCVOID pfuncAddress); //()
void DelRegist(int (*pdelfunc)(void)); //()
void ChkError(int error_code); //
void exe(); //
};
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX