如何将“this”指针传递给全局函数

时间:2014-02-18 04:32:31

标签: c++ constructor this visual-c++-2008

//This is AsynchronousFunction class header file

typedef int (*functionCall)(int, int);

DWORD __stdcall functionExecuter(LPVOID pContext); // global function

class  AsynchronousFunction
{   

  int param1, param2;
  functionCall fCall;
  HANDLE m_handle;

public:
  AsynchronousFunction(functionCall, int, int);
  ~AsynchronousFunction();
  int result();

protected:
private:
  int returnVal; 

};


It's implementation as follows

AsynchronousFunction::AsynchronousFunction(functionCall fCall, int param1, int       param2):m_handle(CreateEvent( NULL , false , false , NULL))
{
  bool b = QueueUserWorkItem(functionExecuter, this, WT_EXECUTEDEFAULT);

  WaitForSingleObject(m_handle, INFINITE);
  SetEvent(m_handle);
}

AsynchronousFunction::~AsynchronousFunction()
{
  CloseHandle(m_handle);
}

int AsynchronousFunction::result()
{

  return 0;// not implemented yet

}

DWORD __stdcall functionExecuter(LPVOID pContext)
{

  return 0;

}

这里pContext接收"这个"指针。我的尝试是访问param1和param2
从这里开始工作 我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

您可以让functionExecuter成为AsynchronousFunction的朋友 要么 在AsynchronousFunction中添加一个公共函数,该函数执行所需的操作并从functionExecuter调用它,如下所示。

DWORD __stdcall functionExecuter(LPVOID pContext)
{
  return (reinterpret_cast<AsyncrhonousFunction*>(pContext))->realFunctionExecuter();
}

答案 1 :(得分:0)

@sajas对不起,我没有明确的参考,除了参考Scott Meyers的书或Herb Sutter书籍;这只是我沿途拾起的那些东西之一。通常,如果不需要私有数据,您不希望通过公开私有数据来破解封装,这正是friend所做的。在这种情况下,如果您决定明天更改AsynchronousFunction的实施并且functionExecuter是其朋友,则您更有可能违反functionExecuter,因为它可能依赖于私人成员;另一方面,如果它从来不是一个朋友,那么你将不得不使用functionExecuter的公共接口来编码AsynchronousFunction