自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Zoey的博客

今天加加油 明天技术流

  • 博客(95)
  • 收藏
  • 关注

原创 【机器人】机械臂:精度、重复精度、控制器分辨率、手腕、末端执行器

器人系统包括:机械臂、外部动力源、手臂末端感工具、外部和内部传感器、计算机接口、控制计算机以及编程软件。

2024-12-31 18:18:47 739

原创 【机器人】机器人的数学模型:符号表示、位形空间、状态空间、工作空间

机器人是一种可重复编程的多功能机械臂,他们通过可变程控运动来执行如移动材料、零件、工具或者特种设备等多种任务。

2024-12-30 15:42:19 862

原创 【Python报错&解决】Keras2cpp程序报错解决

无法打开包括文件:“fstream.h”;ImportError: cannot import name ‘np_utils‘ from ‘keras.utils';ModuleNotFoundError: No module named 'keras.layers.merge';Cannot find reference 'XXX' in '_init_.py'。

2024-10-21 14:42:02 694

原创 【CTK】基于C++和Qt的CTK框架搭建和插件开发

在设计之初 CTK 针对医学成像和建模领域,包含的内容很多,Plugin Framework、Widgets、DICOM……可以选择对自己有用的模块...

2024-03-18 14:36:17 1834

原创 【VS C++报错&解决】修改数据类型解决常见的“超出索引”问题

图像中识别到的连通区域数量超过了输出图像像素类型的最大可表示值。例如,如果使用的是8位整数(unsigned char)作为标签图像的像素类型,那么它只能表示从0到255的整数值,如果连通区域的数量超过255,则报错。

2024-01-13 10:11:30 609

原创 【CMake报错&解决】解决ITK和VTK版本不对应问题

原因:ITK和VTK版本不对应导致找不到vtk_module_config文件,编译失败。

2024-01-13 10:02:59 990

原创 【CMake报错&解决】GDCM配置时报错

同理适用于其他配置中找不到.camke文件的问题

2024-01-04 15:36:18 496

原创 【VS2019 Qt5 VTK9.2】临时解决配置相关问题的简单方法

严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2019 无法解析的外部符号 “__declspec(dllimport) public: __cdecl QVTKOpenGLNativeWidget::QVTKOpenGLNativeWidget(class QWidget *,class QFlags)(_imp??$QFlags@W4WindowType@Qt@@@@@Z),函数"public: void __cdecl MainWindow::initwindow(void)” (?

2023-11-09 16:30:08 789

原创 【Qt5 VS2019 (C++)编译报错&解决】ASSERT failure in QList<T>::at: “index out of range“

原因:1. QList的索引越界,超出了范围;2. QList是空的,没有检索到元素;3. 可能是环境配置问题,没有相应的dll文件。

2023-11-09 14:21:29 3881

原创 【C++ Miscellany】C++重要的几项改变、标准程序库

标准程序库的特点1. 标准程序库中每一样东西几乎都是template;2. 所有成分都位于namespace std内。

2023-10-13 09:57:49 177 1

原创 【C++】异常处理之throw、catch、try、局部资源管理、标准异常库

异常处理机制两个主要成分:1. 异常的鉴定与发出;2. 异常的处理方式。

2023-10-13 08:56:38 1311

原创 【C++】类模板(二)类模板、函数模板、常量表达式与默认参数值、模板参数设计策略、成员模板函数

将某种特定的命名规范强加于被当作参数的类身上:每个类都必须提供类模板中调用到的函数。在只写一份函数定义的情形下,支持任何类型。

2023-10-13 08:56:25 190 1

原创 【C++ Miscellany】如何在同一个程序中结合C++和C

请记住以下几个简单守则:绝对不要重整以其他语言撰写的函数的名称——不论是C,assembler,FORTRAN,Lisp,Forth,COBOL,还是其他任何语言;要压抑name mangling,必须使用C++的指令:extern “C”可以施行于一整组函数身上,只要以花括号封住头尾范围即可:加入__cplusplus,这个符号只针对C++才有定义,即用于C++时含有;用于C时无:

2023-10-12 23:12:00 194

原创 【C++ Miscellany】继承体系非尾端类设计为抽象类

你发现自己需要产生一个具体类,继承自程序库的一个具体类,而你只能使用该程序库,不能修改,怎么办?将你的具体类派生自既有的(程序库中的)具体类,但需要注意本条款一开始所验证的赋值相关问题等;试着在程序库集成体系中找到更高的抽象类,其中有你需要的大部分功能,继承它;以“你所希望继承的那个程序库类”来实现你的新类;手上有什么就用什么。继承体系中的non-leaf(非尾端)类应该是抽象类。

2023-10-12 22:31:07 343

原创 【C++】类模板(一)被参数化的类型、类模板的定义、模板类型参数的处理

类型的相关信息可从模板定义中剥离,由用户使用时再指定。 template机制帮助我们把“与类型相关”和“独立于类型之外”的两部分分离开来;在一个类模板中,与类型相关的部分会被抽取出来,成为一个或多个参数:

2023-10-11 19:03:48 234 1

原创 【C++ Miscellany】未来式思维

未来式思维只不过是加上一些额外的考虑:提供完整的classes——即使某些部分目前用不到。当新的需求进来,你不太需要去回头修改那些classes;设计你的接口,使有利共同的操作行为,阻止共同的错误;让这些classes轻易地被正确运用,难以被错误运用;尽量使你的代码一般化(泛化),除非有不良的巨大后果。

2023-10-11 18:41:04 125

原创 【C++ techniques】让函数根据一个以上的对象类型来决定如何虚化

碰撞无法同时依据object1和object2两者的动态类型决定;你需要的是某种函数,其行为视一个以上的对象的动态类型决定,C++并未提供这样的函数,并不直接支持“double dispatching”/“multiple dispatch”。

2023-10-10 23:41:17 159 1

原创 【C++】面向对象编程(七)RTTI(运行时的鉴定机制):typeid、static_cast、dynamic_cast

Run-Time Type Identification,运行时鉴定机制。typeid运算符查询多态化的类指针/引用,来获得类指针/引用所指对象的实际类型;typeid运算符返回一个type_info对象,其中存储着与类型相关的种种信息。每一个派生类都对应着一个type_info对象,该对象的name()函数会返回一个const char*用于表示类名。dynamic_cast也是一个RTTI运算符,在运行时进行检验基类指针所指类对象是不是某派生类的类对象。

2023-10-10 21:03:29 286

原创 【C++ techniques】利用Proxy classes(代理类)实现:多维数组、区分左/右值运用、限制隐式类型转换

Proxy类的优点:多维数组、左值/右值的区分、压抑隐式转换就是其三。Proxy类的缺点:如果扮演函数返回值的角色,那些proxy对象将是一种临时对象,需要被产生和销毁,构造和析构带来的成本远大于proxies带来的好处,且软件复杂度和也随之增加。

2023-10-09 21:05:49 384

原创 【C++】面向对象编程(六)在派生类中定义一个虚函数、虚函数的静态解析

在派生类中定义一个虚函数时:要么将基类中的虚函数覆盖掉:派生类提供新定义,所声明的函数原型必须完全符合基类所声明的函数原型(包括:参数列表、返回类型、常量性);要么原封不动继承基类中的虚函数;如果继承的是纯虚函数,则这个派生类也会被视为抽象类,无法为它定义任何对象。在派生类中,如果其基类的同名成员函数已声明为虚函数,则派生类的同名成员函数声明和定义前不用加virtual,编译器将自动根据两个同名函数的原型声明,决定某个函数是否会覆盖其基类中的同名函数。

2023-10-09 20:21:52 349 2

原创 【C++ techniques】Reference counting(引用计数)

什么时候最适合reference counting技术:相对多数的对象共享相对少了的实值;对象实值的产生或销毁成本很高,或使它们使用许多内存。

2023-10-08 23:17:36 406 1

原创 【C++】面向对象编程(五)初始化、复制、析构

如果基类有了实际的数据成员,则我们必须给基类数据成员初始化:为基类提供构造函数(利用这个构造函数初始化基类所声明的所有数据成员)注意:抽象基类无法定义任何对象(因为抽象基类里纯虚函数没有函数定义)

2023-10-08 21:35:17 174

原创 【C++ techniques】Smart Pointers智能指针

智能指针看起来、用起来、感觉起来像内置指针,但提供更多的机能。某些智能指针的用途受到诸如“nullness测试、内置指针的转换、以继承为本的转换、对pointers-to-consts的支持“等等限制。尽管如此,智能指针能为你完成一些原本极端困难达成的效果,应该被明智而谨慎地运用。

2023-10-07 22:53:09 309 1

原创 【C++】面向对象编程(四)派生类

派生类必须为从基类继承而来的每个纯虚函数提供对应的实现;必须声明自己的成员;必须为从基类继承而来的每个纯虚函数提供对应的实现;派生类的同名成员函数虚函数不需要再在函数声明/定义前加上virtual;派生类的虚函数必须精确吻合基类中的函数原型;从基类继承而来的public成员和protected成员,都可被视为派生类自身拥有的成员;用类作用域运算符调用哪个类对象的某成员函数。

2023-10-07 21:21:02 233

原创 【C++ techniques】要求/禁止/判断—对象产生于堆中

有时候我们想让某种对象具有“自杀”的能力,所以我们必须要求对象存在堆中,以便我们调用delete this; 另一些时候,我们要求拥有某种确定性,保证某一些类型绝不会发生内存泄漏,原因是没有任何一个该类型的对象从堆中分配出来;堆空间非常宝贵,所以我们要对象全为栈对象,必须禁止对象产生于堆中。

2023-10-06 22:32:01 268 1

原创 【C++】面向对象编程(三)定义一个“抽象基类”的三大步骤

1. 找出所有子类共通的操作行为;2. 找出哪些操作行为必须根据不同的派生类而有不同的实现方式;3. 找出每个操作行为的访问层级。

2023-10-06 20:53:43 301 1

原创 【C++】面向对象编程(二)面向对象的编程思维:virtual虚拟调用、继承、protected成员、派生类与基类

使用virtual关键字,以调用真正指向的对象的成员函数(虚拟调用);使用号和public实现派生类继承的标记,不必刻意区分“继承而来的成员”和“自身定义的成员",在其使用上无特别的不同之处;被声明为protected的所有成员都可以被派生类直接访问;除了派生类之外,都不得直接访问protected成员。当程序定义出一个派生对象,基类和派生类的构造函数都会被执行;

2023-10-05 22:37:31 857

原创 【C++ techniques】限制某个class所能产生的对象数量

允许零个或一个对象;不同的对象构造状态;允许对象生生灭灭;一个用来计算对象个数的Base Class。

2023-10-05 21:09:53 207 2

原创 【C++ techniques】虚化构造函数、虚化非成员函数

virtual constructor:视其获得的输入,可产生不同的类型对象。

2023-10-04 22:39:41 403

原创 【C++】面向对象编程(一) 继承、多态、动态绑定

继承:让我们可以定义一整群互有关联的类,并共享通用的接口;多态:让我们可以用一种与类型无关的方式来操作类对象,通过抽象基类的指针或引用来操纵一整群互有关联的类的共同接口;动态绑定:在程序执行时依据抽象基类的指针或引用所指的是基类对象的类型才能决定。

2023-10-04 21:54:40 239

原创 【C++】class的设计与使用(十一)指向类成员函数的指针 VS 一般函数指针

皆需指定其返回类型和参数列表;目的均为方便调用;

2023-09-30 23:34:03 261

原创 【C++】class的设计与使用(十)重载iostream运算符

希望对某个类对象进行读写操作,直接cout

2023-09-30 23:09:13 714

原创 【C++】class的设计与使用(九)自定义函数对象(function object)

一种提供有函数调用运算符的类。当编译器遇到了一个函数调用,比如lt(ival);,lt可能是个函数名、函数指针、提供了函数调用运算符的的函数对象;如果lt是个类对象,那么编译器会在内部将此语句转换为lt.operator(ival);函数调用运算符可以接受任意个参数。使用举例:它可被用来支持矩阵(Matrix)这个类的多维度下标操作,因为语言所提供的下标运算符仅能接受一个参数。

2023-09-30 22:55:49 336 1

原创 【C++】class的设计与使用(八)复制构造函数、复制赋值运算符

只要类的设计者明确提供了复制赋值运算符的定义,这个复制赋值运算符就会取代默认的成员逐一复制操作行为。

2023-09-30 18:00:49 216 1

原创 【C++】class的设计与使用(七)友元函数、友元类(关键字friend)

任何class都可以将其他类或者函数指定为朋友(friend); friend具备了与类成员函数相同的访问权限,可以访问类的private member; 声明:只需要在函数原型前加上关键字friend; 这份声明可以出现在class定义的任意位置上,不受private和public的影响; 想要将数个重载函数声明为某个类的friend,所有的重载函数前都要加friend;

2023-09-30 17:36:16 251 1

原创 【C++】class的设计与使用(六)运算符重载、嵌套类型(typedef)

运算符重载的规则:1. 不可以引入新的运算符:除了. .* :: ?:四个运算符,其他的运算符皆可被重载;2. 运算符的操作数个数不能变:二元运算符需要两个操作数,一元运算符需要一个操作数;3. 运算符优先级不可改变;4. 运算符函数的参数列表中,必须至少有一个参数为class类型:我们没法给比如指针这种非类类型重载运算符,也不能给它引进新运算符。

2023-09-29 00:22:43 265 1

原创 【C++ Efficiency】理解虚函数、多重继承、虚基类和RTTI

理解虚函数、多重继承、虚基类及RTTI的成本很重要。但你必须知道:如果你需要这些功能,就要忍受这些成本,世事难两全。有时你确实想要回避编译器生成的服务,例如隐式vptr和“指向虚基类”的指针会造成“将C++对象存储于数据库”和“跨进程移动C++对象”困难度提高,所以你希望有某种方法模拟这些性质。不过从效率上来讲,自己写的不可能比编译器生成的更好。

2023-09-28 23:58:31 477 1

原创 【C++ Efficiency】考虑替换其他程序库来消除程序瓶颈

不同的程序库即使提供相似的机能,也往往表现出不同的性能,所以一旦找到程序的瓶颈,应该知道是否可以通过替换程序库来消除瓶颈。比如:如果你的程序的有I/O瓶颈,你考虑用stdio替换iostream,如果程序的在动态分配和释放上存在使用大量的时间,你可以想想是否有其他的operator new和operator delete的实现可用。因为不同的程序库将效率、扩充性、移植性、类型安全性等的不同设计具体化,有时可以找找看是否存在另一个功能相近的程序库而其在效率上有较高的设计权重。

2023-09-27 21:48:29 180

原创 【C++】class的设计与使用(五)静态类成员

1. 静态成员函数的操作与任何对象都没有关联,所以可以很方便的用一般自定义函数的方式来调用,但必须加类作用域运算符;2. “静态成员函数”可以在“与任何对象都无关联”的情形下被调用;3. 成员函数只有在“不访问任何非静态成员”的条件下才能被声明为static,声明方式是添加关键字static;4. 当我们在class主体外部进行成员函数的定义的时候,如果声明加了static,定义时就不用再加static了。

2023-09-27 21:17:55 514

原创 【C++ Efficiency】使用运算符的复合形式取代其单独形式,效率更高

operator的复合形式(operator+=)比单独形式(operator+)效率更加高,开发时优先考虑使用复合形式。

2023-09-26 22:04:53 269

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除