如何向方法传递可以是任何类型函数的参数?

How can I pass to a method an argument that could be a function of any type?

本文关键字:类型 任何 函数 参数 方法      更新时间:2023-10-16

我必须创建一个库作为赋值,它将在linux终端上实现类似菜单的功能。因此,我必须为每个子菜单启用一个位置,要么是另一个子菜单,要么是对某个函数的调用。

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

如何实现这样一个方法调用另一个函数,而不假设这些函数的任何东西,但可以调用它们?我应该使用模板还是有其他方法;或者我应该用另一种方式来实现它?

您可以使用带有虚拟方法的对象来完成此操作。然后,应用程序可以决定将哪些参数放入回调对象中。

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