摘要:
重载解析(overloading resolution)的规则决定了编译器为一个函数调用选用哪个函数定义。一般过程如下:将名称相同的函数/模板函数找到并创建候选列表从中挑选参数数目正确,符合完全匹配/隐式转换规则的函数创建可行函数列表存在最佳可行函数 ? 使用 : 报错完全匹配包括形参和实参类型完全一样或无关紧要的转换,无关紧要的转换包括引用和值之间,数组到指针,函数到函数指针,加上const/volatile限定符。特殊规则: 当形参是指针/引用时,T&/T*会优先和T&/T*匹配,其次才是const T&/T*。而若分别定义了T和const T作为形参,则将产生二义 阅读全文
随笔分类 - C/C++
再看C++引用类型
2013-11-27 16:15 by robturtle, 1470 阅读, 收藏,
摘要:
之前弃用博客园的原因是其不支持markdown语法。到今天偶然进来试了一下,发现Markdown toggle原来是能支持的(不知道是不是因为它升级了),遂重新启用。在一年前学C++的时候就对引用,常引用和右值引用迷迷糊糊的,再加上老师实在是不给力啊!(当时我问她一个很基础的关于函数对象的问题,她问我,什么是函数对象)所以那时候就只知道使用惯例而不知其具体内涵。再加上近一年时间都在其他语言上花费精力,对它们的区别就更加模糊了。直到前几天在stackoverflow上问了个关于SFINAE的问题,才猛地感觉到自己的C++完全要回炉重练了。今天重新看回C++ Prime Plus,终于有了一种恍然 阅读全文
学习OpenCV2 C++ API(3)
2013-03-09 23:17 by robturtle, 635 阅读, 收藏,
摘要:
pyrDown 缩放图像(exp 02-05, P28)
Canny 边缘检测 (exp 02-06, P29)
VideoCapture 视频流读取 (exp 02-08, P31) 阅读全文
稍不简易视频播放器
2013-03-09 21:49 by robturtle, 271 阅读, 收藏,
摘要:
最近忙着把OpenCV2 GUI 包装得不亦乐乎。从5天前第一次实现了视频播放器,到现在把各个组件不断地解耦,封装操作。因为是第一次使用继承特性在实践上,且第一次学画UML图,没什么经验,最后本来设想得很整洁的结构迅速变乱,最后只得画繁为简,只实现需要的功能:单摄像头2D平面图像 8U 深度 RGB 图像处理与显示,现在得到的结果大致是下面的样子:今后有时间进一步 document 封装实现的一些 C++11 fancy 功能(爱死 initializer_list 了!)。关于尚未实现的功能,目前的计划如下:cv::waitKey 功能太弱,考虑在外部实现 timer 功能支持视频多路播放, 阅读全文
零零碎碎 -- 继承与代理
2013-03-06 15:34 by robturtle, 270 阅读, 收藏,
摘要:
继上次尝试用 boost::any 容纳窗口部件失败后,使用了类的继承特性实现,这是昨天初始版本的一个快照:ifndef WINDOWCOMPONENT_HPP#define WINDOWCOMPONENT_HPP#include <string>#include <memory>#include <list>using std::string;using std::shared_ptr;using std::list;#include "cppcommon.hpp"using namespace cliout;namespace cvo 阅读全文
零零碎碎 -- 回调函数与多态
2013-03-05 15:07 by robturtle, 1108 阅读, 收藏,
摘要:
回调函数前天写的视频播放器,第一次在编程中使用了回调函数的接口。当然,这里所说的“函数”是广义的“可调用表达式”,设计签名的时候模仿了OpenCV滚动条,最后一个参数接受void指针传入用户数据。虽然不知道他们这么设计是出于什么考虑(或者是为了兼容c代码?),不过显然在C++中有更好的方案。因为对C++的了解有限,我所能想到的比较好的设计也就是下面这两种:使用 boost::any 接受用户数据不接受用户数据,让用户自行绑定boost::any 可以说就是C++版本的 void *,不过它是类型安全的。至于究竟选择上面的哪一种还是值得好好考虑一番的。首先考虑的就是,是否需要在结构中保存用户数据 阅读全文
学习OpenCV2 C++ API(2)-- 简易视频播放器
2013-03-04 09:42 by robturtle, 3921 阅读, 收藏,
摘要:
简易的视频播放器,简易的回调函数接口。 version 0.1 阅读全文
学习OpenCV2 C++ API(1)
2013-03-04 01:43 by robturtle, 12550 阅读, 收藏,
摘要:
Display Image (Exp 02-01, P19)
AVI Player & Trackbar (Exp 02-02~03, P21-23)
Gaussian Smooth (Exp 02-04, P26) 阅读全文
Fedora 18 下编译安装 OpenCV
2013-02-15 02:47 by robturtle, 1092 阅读, 收藏,
摘要:
经过这次独立编译完成了OpenCV下的安装,标志着我已经脱离了Linux菜鸟阶段,已经向新手阶段迈进拉!从听说Linux到现在正好整一年,作为一个有追求的又喜欢装逼的linuxer,这个时候最应该做的就是把ubuntu换掉。一开始的备选是装debian,不过我很快就改变主意选择了fedora,一是因为名字好听,二是因为自带gnome3.6。fedora下没有OpenCV二进制包,于是我只能手动编译。OpenCV的依赖有:pkg-config libpng zlib libjpeg libtiff libjasper另外一个重要的依赖是 ffmpeg,为了这个东西我整了好久。。。如果需要GUI则 阅读全文
C/C++通用CMakeLists.txt --支持批量目标生成
2013-02-09 01:06 by robturtle, 11364 阅读, 收藏,
摘要:
在“源目录/subdirectory”下调用“cmake .. && make”将自动批量生成所有目标。 阅读全文
由make进化至cmake
2013-02-06 15:56 by robturtle, 6744 阅读, 收藏,
摘要:
趁着过年的时间,持续更新工具。这次学习了CMake的基本功能,今后CMake将成为我的主要创建工具了。与make相比,CMake有如下几个优势:更方便智能的包括路径、二进制路径的设置和处理:与make中设置path的方式相比,cmake对路径的设置要容易方便得多,也更加灵活,特别是在跨平台编译的时候,这一点显得更加明显;批量目标生成更容易:对于CMake的命令格式,在vim下只需要几个寄简单的存器操作就能批量设置好目标生成和库链接,而在make下的做法则是用只有一个默认目标的通用Makefile直接make,如果要添加批量支持的话,编辑每个目标的链接库设置会比较麻烦;方便的测试功能:CMake 阅读全文
ubuntu下使用OpenCV
2013-01-07 01:14 by robturtle, 11034 阅读, 收藏,
摘要:
和boost类库一样,ubuntu下也提供了opencv的二进制包,安装非常简单: $ sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg62-dev libtiff4-dev cmake libswscale-dev libjasper-dev$ sudo apt-get install libopencv-dev我现在学习的是O’Reilly 的《Learning OpenCV》,书中是以1.0版本为例的。而我现在安装的版本是2.3.1,其组织方式与1.0还是有很 阅读全文
C++ Traps & Pitfalls
2012-12-02 14:36 by robturtle, 610 阅读, 收藏,
摘要:
vector iterator bomb仅仅为了随机访问的特性,究竟要在性能和安全性上牺牲多少?STL告诉了我们答案:很多。考虑 vector 扩容的方法是申请新内存并拷贝,引用在原来内存地址的迭代器将全部失效。也就是说,在需要动态扩容的情形下,下标访问要更安全。不要用register, 少用inline个人认为,类似于这种的修饰符属于历史的遗留,是编译器的编写者把问题抛给用户的不负责任的做法——用户被迫需要处理更多的复杂度,而则多付出的劳动未必能带来好的回报,因为用户往往很难正确地使用这些优化手段,而且很多时候使用这种修饰符手动优化的程序还要比机器自动优化的糟糕很多。并且现代的编译器已经达到 阅读全文
Makefile for C/C++
2012-12-02 14:27 by robturtle, 342 阅读, 收藏,
摘要:
Makefile for C/C++功能:分析工作目录下的依赖关系,并根据依赖关系编译链接生成可执行文件# Template version: 1.0.1# Date: 2012/11/10 11:48# Maintainer: Liu Yang####################### Customized Settings #######################OUTPUT := demoVPATH := /home/ben/includeLIB := /home/ben/libopt :=## Example opt=-lcurse -lm -pthread #CC := g 阅读全文
《C++ 沉思录》读书笔记
2012-12-02 14:22 by robturtle, 368 阅读, 收藏,
摘要:
check list for surrogate class代理类实现了被代理类的所有虚拟方法;代理类存储的数据指针是指向基类的;被代理类实现 copy() const (必须有const修饰符,当代理类是用const类型构造时)如果希望创建代理类数组,必须有默认构造函数,同时意味着代理类所有方法中对指针操作前都要检查是否有效。return value's typeT foo() const;const T& foo() const;T& foo();只有(3)返回可修改左值。而(1)和(2)是实现‘读取’语义的可选项,其中(1)更偏重于‘值语义’,(2)更偏重‘指针语 阅读全文
g++ error/warning list
2012-12-02 13:33 by robturtle, 953 阅读, 收藏,
摘要:
warning: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second.note: 一般出现在原生类型的隐式类型转换中,比如在类中重载了 Class::operator[](unsigned), 但却用 Class[0] 而不是 Class[0u] 来调用。error: passing 'const T' as 'this' argument o 阅读全文
浙公网安备 33010602011771号