C++ 异步创建对象
C++ Asynchronous creation of objects
我目前有一个异步API,其中管理器类负责创建类A
,B
,C
等的其他对象。创建是异步的,每次调用函数manager.createXXX()
都会伴随着它的回调on_createXXX_done(A& a)
。
A
、B
、C
对象的创建必须是顺序的。API的典型用法是调用A
的创建,并在其回调中触发B
的创建,等等。
这涉及将创建逻辑拆分为许多函数,我觉得这很丑陋。此外,创建完所有对象后需要执行的操作需要在上次创建的对象(C
)的回调上编码,即使该对象与要执行的操作之间没有直接关系。
生成器设计模式实际上并不适合,因为管理器不拥有对象A
、B
、C
,它只是帮助创建和返回它们。
void on_creationA_done(A& a)
{
m_a = a;
//Trigger next creation
m_manager.createB()
}
void on_creationB_done(B& b)
{
m_b = b;
//Trigger next creation
m_manager.createC()
}
void on_creationC_done(C& c)
{
m_c = c;
//No more creations are needed. Just perform some post-creation actions
do_something() // This needs to be called once all A, B, C are created.
}
我还检查了愚蠢/期货以链接异步操作,但这涉及通过我们的公共 API 公开愚蠢库,对吧?
在这种情况下,使用什么模式?
将 A、B、C 创建链接在其回调中似乎有点限制(且不可扩展)。如果将来需要实现更多用例,您也必须在回调中处理它们,从而使代码过于复杂且不直观。
当前的情况是一个特定的用例,应该在另一个经理类的帮助下处理,我们称之为UseCaseABC,它知道用例的特定要求,约束等。
在UseCaseABC类中,您可以跟踪A,B,C对象的创建,并在所有三个对象都存在时调用do_something。
class UseCaseABC
{
void on_creationA_done(A& a)
{
m_A = a;
NotifyCreation();
}
void on_creationB_done(B& b)
{
m_B = b;
NotifyCreation();
}
void on_creationC_done(C& c)
{
m_C = c;
NotifyCreation();
}
void NotifyCreation()
{
if (all three objects created)
{
do_something();
ClearABCMembers();
}
}
}
如果 A、B、C 对象的创建由许多客户端异步触发,则可以将 m_A、m_B、m_C 个实例替换为以线程安全方式访问的对象池。
相关文章:
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何创建对象函数指针C++映射?
- 创建 Spdlog 异步文件记录器时遇到困难
- C++创建对象数组
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- 如何获取在 main() 函数中构造的类的创建对象?
- 基于文件中的条目创建对象
- 错误:创建对象后无法分配区域
- C++ 通过输入创建对象
- 堆还是堆栈用于创建对象?
- 使用 C++ 创建对象数组
- 使用unique_ptr创建对象
- C++递归地在类构造函数中创建对象
- 通过向构造函数其他对象引用页面来创建对象
- ReactiveX (rx) - 在对象上应用可观察对象,而不是在可观察对象中创建对象
- 如何在OSX上正确创建C++对象文件(.o)
- 编译器是否会创建vtable,而不考虑在c++中创建对象
- 创建对象并防止被破坏
- 在C++中,友元类可以从友元类创建对象吗
- C++ 异步创建对象