在我的main.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);
}
可以想象,使用这样的方法很容易使初始函数/回调混乱。
答案 0 :(得分:1)
您的问题不是很清楚,但我会假设以下内容:
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);
}