+ -
当前位置:首页 → 问答吧 → 如何返回函数指针

如何返回函数指针

时间:2011-04-19

来源:互联网

template <class T>
T * CBase<T>::Create(string str)
{
  T * (* pFun)();  
  pFun = (T * (*)())dlsym(vpHandle,str.c_str());//(1)
  if (NULL == pFun)
  {
  cerr<<"error"<<endl;
  dlerror();
  dlclose(vpHandle);
  return NULL;
  }
  return (* pFun)(); //(2)
}
有如下问题请教
(1)(T * (*)())是不是强制转化为函数指针
 (2) return (* pFun)(); 返回的是函数,为什么不是函数指针

作者: cai0612123   发布时间: 2011-04-19

(1) (T * (*)())是不是强制转化为函数指针
是的。
(2) return (* pFun)(); 返回的是函数,为什么不是函数指针
(* pFun)()是调用这个函数,不是返回函数指针。

换一种写法要更清晰:
C/C++ code


typedef T *(* pFun)();

T *CBase<T>::Create(string str)
{
  pFun fun;   
  fun = (pFun)dlsym(vpHandle,str.c_str());
  if (NULL == fun)
  {
    cerr<<"error"<<endl;
    dlerror();
    dlclose(vpHandle);
    return NULL;
  }
  return fun;
}

作者: qgw_2000   发布时间: 2011-04-19

貌似是C++的代码,这个我就傻了。不过这两个问题我可以回答。
(1)是函数指针的指针。
(2)对啊,这样写就代表执行pFun所指向的那个函数。这样返回值才和T *一致啊。

作者: lishanchao   发布时间: 2011-04-19