我必须将一个库作为一个赋值,在linux终端上实现类似菜单的功能。因此,我必须为每个子菜单启用一个位置,使其成为另一个子菜单或调用某个功能。
我想知道如何实施这样的电话。由于它是一个库,它可以用于十几种不同类型的函数,使用不同数量和类型的参数。
如何实现这样一个方法调用另一个函数,这些函数不会假设任何关于那些函数的任何东西可以调用它们?我应该以某种方式使用模板还是有另一种方法;或者我应该以另一种方式实施它?
答案 0 :(得分:2)
您可以使用具有虚拟方法的对象来执行此操作。然后应用程序可以决定将哪些参数放入回调对象。
class MenuItem;
// Callback Interface
struct MenuCallback
{
virtual void activated(MenuItem* sender) = 0;
virtual ~MenuCallback(){}
};
// Application Code
struct ConcretMenuCallback: MenuCallback
{
ConcretMenuCallback(int parameter1);
void activated(MenuItem* sender)
{
// do something with the data stored in this object
}
};
// Example Item
class MenuItem
{
MenuItem(MenuItem*parent, std::string caption, MenuCallback* cb);
void notify();
}
MenuItem::notify()
{
// call the callback-Object
if(m_callback)
m_callback->activated(this);
}