我怎样才能将一个可能是任何类型函数的参数传递给一个方法?

时间:2013-01-19 18:19:46

标签: c++

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

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

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

1 个答案:

答案 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);
}