问题
template <typename Type,typename Eventlist,typename Eventlist,typename RejectEventList,typename QueuedEventHandler>
class ParallelProcedureQueueManager
{explicit ParallelProcedureQueueManager(Type& equipment, const std::uint8_t maxQueueSize = 10): queuedEventHandler(equipment), queueEventVisitor(equipment), equipment(equipment), maxQueueSize(maxQueueSize){}QueuedEventHandler queuedEventHandler;QueueEventVisitor queueEventVisitor;const Type& equipment;const std::uint8_t maxQueueSize;
}
为什么ParallelProcedureQueueManager
的构造函数中,都是用 equipment 作为参数传给成员变量?
分析
-
成员变量初始化:构造函数使用成员初始化列表来初始化类的成员变量。这种方式比在构造函数体内赋值更高效,因为它直接调用成员变量的构造函数,而不是先调用默认构造函数再赋值。
-
依赖注入:将 equipment 传递给
queuedEventHandler
和queueEventVisitor
的构造函数,表明这些成员变量依赖于 equipment,并且需要在创建时进行初始化。
答案
其实前两个queuedEventHandler(equipment), queueEventVisitor(equipment)
是依赖注入,equipment(equipment)
才是赋值。
问题2:怎么判断是依赖注入,还是直接赋值?
要判断 queuedEventHandler(equipment) 是依赖注入还是直接赋值,我们需要了解以下几点:
- 成员变量的类型:queuedEventHandler 的类型是什么?
- 构造函数的实现:queuedEventHandler 的构造函数是否接受 equipment 作为参数?
- 成员初始化列表:构造函数是否在成员初始化列表中初始化 queuedEventHandler?
总结
至于怎么判断是依赖注入还是直接赋值,就看二者是不是同一个类型,如果是就是赋值,如果不是大概率就是注入依赖了。