首页 > 编程语言 >【C++基础知识——如何判断是注入依赖还是赋值?】

【C++基础知识——如何判断是注入依赖还是赋值?】

时间:2024-09-27 22:20:33浏览次数:3  
标签:初始化 成员 queuedEventHandler C++ 基础知识 equipment 赋值 构造函数

问题

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 传递给 queuedEventHandlerqueueEventVisitor 的构造函数,表明这些成员变量依赖于 equipment,并且需要在创建时进行初始化。

答案

其实前两个queuedEventHandler(equipment), queueEventVisitor(equipment)是依赖注入,equipment(equipment)才是赋值。

问题2:怎么判断是依赖注入,还是直接赋值?

要判断 queuedEventHandler(equipment) 是依赖注入还是直接赋值,我们需要了解以下几点:

  • 成员变量的类型:queuedEventHandler 的类型是什么?
  • 构造函数的实现:queuedEventHandler 的构造函数是否接受 equipment 作为参数?
  • 成员初始化列表:构造函数是否在成员初始化列表中初始化 queuedEventHandler?

总结

至于怎么判断是依赖注入还是直接赋值,就看二者是不是同一个类型,如果是就是赋值,如果不是大概率就是注入依赖了。

标签:初始化,成员,queuedEventHandler,C++,基础知识,equipment,赋值,构造函数
From: https://blog.csdn.net/XWWW668899/article/details/142603607

相关文章

  • C++ 容器赋值运算符
    ▲《C++Primer》P302assignlist<string>names;vector<constchar*>old_c_str{"娃哈哈","孟菲斯","HelloWold!"};names.assign(old_c_str.cbegin(),old_c_str.cend());//这个可以,拷贝构造for(constautos:names){cout......
  • 题解 HZOJ 284 超市卖货 C/C++
    题目传送门:超市卖货-题目-OnlineJudge(haizeix.com)https://oj.haizeix.com/problem/284思路:每次寻找价格最高的商品,并尝试卖掉它:寻找未卖出商品的日期,优先锁定其保质期最后一天,若该日期已卖出则继续向前寻找能找到未卖出商品的日期时,收入增加,标记该日期代码实现:为......
  • C++引用的基本概念,引用的定义与使用
    C++中的引用(Reference)是一种复合类型,它是某个已存在变量的别名(alias)。换句话说,引用在内部存储了另一个变量的地址,但是与指针不同的是,引用在定义时必须被初始化,并且一旦被初始化后,它就不能再被改变为引用另一个变量(即引用一旦绑定到一个变量,就不能再被绑定到另一个变量)。此外,引......
  • Pandas -----------------------基础知识(五)
    索引和列操作函数缺失值索引和列操作#1加载数据#1.1从链家租房数据集中获取天通苑租房区域的所有数据存储在df2中#1.2从df2中获取价格列存储在df2_price对象importpandasaspddf=pd.read_csv('/root/pandas_code_ling/data/b_LJdata.csv')df2=df[df['区......
  • C++字符串与字符数组
    在C++中,字符串和字符数组是紧密相关的概念,但它们之间也存在一些关键的区别。理解这些区别对于编写高效、安全的C++代码非常重要。字符数组字符数组是C++中用于存储字符序列的基础数据结构。它本质上是一个元素类型为char的数组,可以在声明时初始化,也可以在运行时通过赋值或函......
  • C++线程同步之条件变量
    条件变量需要和互斥量配合起来使用,C++11提供了两种条件变量:condition_variable:需要配合std::unique_lockstd::mutex进行wait操作,也就是阻塞线程的操作。condition_variable_any:可以和任意带有lock()、unlock()语义的mutex搭配使用,也就是说有四种:std::mutex:独占的非递归互斥锁......
  • 算法速通-90题(1—完数难题)[含pyhton,java,c++]
    题目:完数难题 题目描述如下:    小明正在进行期末数学考试,现在他遇到了这样一个题:如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数   比如6,28都是完数:6=1+2+3 ; 28=1+2+4+7+14。请判断两个正整数之间完数的个数。小明想请聪明的你帮......
  • 广州C++信奥老师解一本通题 1919:【02NOIP普及组】选数
    ​ 【题目描述】已知nn个整数x1,x2,……xn以及一个整数K(K<n)。从n个整数中任选K个整数相加,可分别得到一系列的和。例如当n=4, k=34个整数分别为3,7,12,193,7,12,19时,可得全部的组合与它们的和为:3+7+12=223+7+19=297+12+19=383+12+19=34现在,要求你计......
  • C++ 智能指针详解: std::unique_ptr 和 std::shared_ptr
    C++11引入了智能指针,它们是管理动态分配内存的强大工具。本文将详细介绍两种最常用的智能指针:std::unique_ptr和std::shared_ptr。std::unique_ptr概述std::unique_ptr是一种独占所有权的智能指针。它确保一个对象只能被一个unique_ptr所拥有,这意味着不能复制unique_......
  • C++17 std::variant 详解:概念、用法和实现细节
    std::variant是C++17引入的一个新的标准库类型,它提供了一种类型安全的联合体。这个类可以在同一时间持有几种可能类型中的一个值。本文将详细介绍std::variant的概念、用法和实现细节。1.基本概念std::variant是一个模板类,可以存储几种不同类型中的一个值。它的声明如下:te......