从派生类隐式调用函数

Calling functions implicitly from derived classes

本文关键字:调用 函数 派生      更新时间:2023-10-16

在我的主.cpp我有类似于以下内容的东西:

void OnEventStart(int id)
{
    // Do some stuff
}

此函数是一个回调,仅在事件发生时触发(由其来自的主 sdk)。

我现在有这个类:

class SomeClass {
public:
    void OnEventStart(int id);
};
void SomeClass::OnEventStart(int id)
{
    // Do some other stuff
}

现在我想在不做这样的事情的情况下触发void SomeClass::OnEventStart(int id)

SomeClass class;
void OnEventStart(int id)
{
     // Do some stuff
     class.OnEventStart(id);
     // AnotherClass.OnEventStart(id);
     // Another.OnEventStart(id);
}

可以想象,使用这样的方法很容易使初始函数/回调混乱。

你的问题不是很清楚,但我会假设以下内容:

  • 您有某种回调处理程序,它采用void(*)(int)

在这种情况下,如果SomeClass是无状态的,您可以简单地使用 lambda 包装器:

my_framework_callback([]{ SomeClass{}.OnEventStart(id); });

如果我误解了你在问什么,这里有一个不同的假设:

  • SomeClass和类似类型是无状态的。

  • 您很恼火,因为必须实例化SomeClass只是为了调用它的方法之一。

如果是这种情况,您可以当场创建SomeClass临时实例

void OnEventStart(int id)
{
     SomeClass{}.OnEventStart(id);
     AnotherClass{}.OnEventStart(id);
     Another{}.OnEventStart(id);
}

如果你的问题是...

"我有各种具有相同接口的类,我想在所有类上调用一个函数。

。然后,一种可能的解决方案是使用抽象基类,该基类提供.OnEventStart() = 0并存储指向该基类的指针std::vector

std::vector<std::unique_ptr<MyAbstractClass>> handlers;
void OnEventStart(int id)
{
    for(auto& h : handlers)
        h->OnEventStart(id);
}