-1

我必须创建一个库作为在 linux 终端上实现类似菜单的功能的任务。因此,我必须为每个子菜单启用一个位置,使其成为另一个子菜单或对某些功能的调用。

我想知道如何实现这样的调用。由于它是一个库,它可以用于十几种不同类型的函数,采用不同数量和类型的参数。

如何实现这样的方法调用另一个函数,这些函数不会假设任何关于这些函数的任何东西都可以调用它们?我应该以某种方式使用模板还是有另一种方法?或者我应该以另一种方式实现它?

4

1 回答 1

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);
}
于 2013-01-19T18:42:23.623 回答