我想向外界展示一个类的功能(成员函数),而不在它的公共部分公开它的功能。因此用户将能够动态地知道/调用它的功能。以下是一些方法:
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){}
};
b) 提供一个函数名称的字符串列表,以及一个采用字符串参数来调用指定成员函数的函数。
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?)?
注意:
* IParameter 就是这样一个类,旨在保存通用/不言自明的数据,每个函数都知道如何解释它。
* 所有函数的签名都是一样的:
void FuncName(IParameter*);
谢谢