C++ 从派生类隐式调用函数
在my main.cpp中,我有一些类似的内容:C++ 从派生类隐式调用函数,c++,c++11,c++14,software-design,C++,C++11,C++14,Software Design,在my 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 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 OnEventStart(int id)
{
// Do some stuff
}
- 您有某种回调处理程序,它接受
李>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);
}
std::向量处理程序;
void OnEventStart(int-id)
{
用于(自动和h:处理程序)
h->OnEventStart(id);
}
我假设您希望使用框架/SDK直接调用您的成员函数?那么这在很大程度上取决于您使用的实际框架/SDK。这甚至可能是不可能的。但是我们不能告诉您,除非您告诉我们框架/SDK以及如何使用它(使用a)。还有,我想如果你告诉我们你想怎么做,而不仅仅是你不想怎么做,这将有助于理解这个问题谢谢你的回答。很抱歉,问题不清楚,我在你文章的第二部分提到了这个问题。这个方法不需要我实例化每个类(将有很多)然后继续处理处理程序。为每个类向后推(类)
。@thefatshizms:你可以用很多不同的方法来做这件事。如果您知道编译时的所有类型,那么可以使用元编程库和编译时列表。如果您允许代码用户添加更多满足接口要求的类型,则需要执行您提到的操作,可能需要提供某种类型的register()
函数。