C++ 运行时功能的表示和使用

C++ 运行时功能的表示和使用,c++,dynamic,interface,member-function-pointers,C++,Dynamic,Interface,Member Function Pointers,我想向外界展示一个类的功能(成员函数),而不在它的公共部分公开它的功能。因此,用户将能够动态地知道/调用它的函数。以下是一些方法: a) 提供指向成员函数的指针。在结构中提供的指针,带有用于保存函数名的附带字符串 class IBase { public: typedef void (IBase::*FuncPtr)(Iparameter*); typedef struct Module { FuncPtr Func; string Name;


我想向外界展示一个类的功能(成员函数),而不在它的公共部分公开它的功能。因此,用户将能够动态地知道/调用它的函数。以下是一些方法:
a) 提供指向成员函数的指针。在结构中提供的指针,带有用于保存函数名的附带字符串

class IBase
{
public:      
  typedef void (IBase::*FuncPtr)(Iparameter*);  
  typedef struct Module
  {
     FuncPtr Func;
     string Name; 
  };
  vector<Module> GetFunctions()const
  {  
    vector<Module> vec;  
    vec.push_back(Module(&F1, "F1"));  
    vec.push_back(Module(&F2,"F2"));  
    return vec;  
  }
private:  
  void F1(IParameter *param){}  
  void F2(IParameter *param){}  
};  
class IBase
{
public:
  void Invoke(string funcName, IParameter *param)
  {
   if(funcName=="F1")F1(param);
   else if(funcName=="F2")F2(param);
  }
private:  
  void F1(IParameter *param){}  
  void F2(IParameter *param){}
};
问题:哪种方法更有效?有没有更好的办法?我是否在重新发明轮子(boost::function?)

备注:
*IPParameter是这样一个类,设计用于保存通用/自解释数据,每个函数都知道如何解释它。
*所有功能的签名均相同:

void FuncName(IParameter*);  

感谢

好吧,如果要使用例如
std::map
(O(logn)查找时间)或
std::hash_map
(通常为O(1)查找时间),则比线性搜索向量或一系列
更快


但真正的问题是:为什么要在运行时按名称(即使用字符串)访问函数?当然索引或指针会更容易些?换句话说,为什么
Invoke()
函数的第一个参数是字符串?

由于成员函数将显示在GUI中,因此我必须用字符串(函数名称)导出它们。但是Invoke函数不需要在字符串中获取关于调用哪个函数的信息,当然它可以使用一个标记。@Taz:我理解。但是,为人类可读的目的提供字符串并不意味着您需要使用该字符串在数据结构中执行查找。