音视频开发进阶

C++ 模板系列小结07-尾置返回类型

在使用模板时可以显示指定模板类型,尤其是针对有返回类型的模板,显示指定可以避免类型转换带来的困扰。 但有时候显示指定模板实参类型会给用户增添额外负担,而且不会带来什么好处。 比如如下代码,接受表示序列的一对迭代器和返回序列中的一个元素的引用: 1template<typename It> 2??? &fcn(It beg,It end){ …

C++ 模板系列小结06-可变参数模板特性

C++11 中引入了可变参数模板的特性,可变参数模板就是一个接受可变数目参数的模板函数或者模板类。 可变数目的参数被称为参数包,存在如下两种参数包: 模板参数包:表示零个或多个模板参数 函数参数包:表示零个或多个函数参数 具体如下所示,声明了一个可变参数函数模板。 1// Args 是一个模板参数包;rest 是一个函数参数包 2// Args 表示零个或多 …

C++ 中的多线程的使用和线程池建设

C++ 11 引入了 std::thread 标准库,方便了多线程相关的开发工作。 说到多线程开发,可不仅仅是创建一个新线程就好了,不可避免的要涉及到线程同步的问题。 而保证线程同步,实现线程安全,就要用到相关的工具了,比如信号量、互斥量、条件变量、原子变量等等。 这些名词概念都是来操作系统里面引申来的,并不是属于哪一种编程语言所特有的,在不同语言上的表现形 …

C++ 模板系列小结05-模板类型作为模板参数

在前面的文章中,模板参数除了是类型之外,还可以是非类型参数,但只有整型和指向外部链接对象的指针才可以。 除此之外,模板类型同样可以作为类型参数,并且还很有用处。

C++ 模板系列小结04-类模板中的成员模板

在之前的类模板中,只在类声明时用了 typename 指定模板参数类型,之后的成员函数复用模板参数类型。 但实际上,类成员也可以是模板,嵌套类和成员函数都可以作为模板。

C++ 模板系列小结03-在模板中指定变量类型

在之前的代码示例中,频繁用到 typename 关键字。 它的作用就是声明模板参数是类型参数(对于非类型参数,之前的文章也有提到了),也可以用 class 关键字来代替,但为了避免歧义,大多还是使用 typename 了。 除此之外,在模板的定义也可以使用 typename 关键字,用来指定变量的类型。

C++ 模板系列小结02-非类型模板参数

前面已经介绍了函数模板和类模板,还介绍了类模板的默认参数,在代码示例中都是用具体类型来作为模板参数的。 实际上,模板参数不局限于类型,普通值也可以作为模板参数,也就是本篇要讲的内容:非类型模板参数。

C++ 模板系列小结01-函数模板和类模板

现如今,掌握 C++ 模板技巧并且熟练使用可以说是能力进阶的必备内容了。 在一些优秀的开源项目中经常能看到模板的使用,要是不了解其使用方法,对分析源码都会有些阻碍。 推荐阅读《C++ Templates 中文版》一书,或许可以让你对 C++ 模板有个更加系统的概念,同时辅助阅读网上相关的博客文章加深理解,在代码实践中去掌握提高。 C++ 模板主要可以分为函数 …

Java 显式锁 Lock 与条件队列

在 Java 5.0 之前,在协调对共享对象的访问时可以使用的机制只有 synchronized 内置锁和 volatile 关键字。 Java 5.0 增加了一种新的机制:Lock 显式锁,当内置锁 synchronized 不适用时,它就可以作为一种新的选择。 回顾一下内置锁 synchronized 的使用: 1// synchronized关键字用法 …

C++ 标准容器库小结

《C++ Primer》 第五版笔记摘录~~~