音视频开发进阶
文章
Light
Dark
Auto
code
C++ 模板系列小结07-尾置返回类型
在使用模板时可以显示指定模板类型,尤其是针对有返回类型的模板,显示指定可以避免类型转换带来的困扰。 但有时候显示指定模板实参类型会给用户增添额外负担,而且不会带来什么好处。 比如如下代码,接受表示序列的一对迭代器和返回序列中的一个元素的引用: template<typename It> ??? &fcn(It beg,It end){ return *beg; } 我们并不知道返回结果的准确类型,但知道所需类型是所处理的序列的元素类型。 vector<int> vi = {1,2,3,4,5}; auto &i =fcn(vi.begin,vi.end()); 如上代码,知道函数应该返回 *beg,而且知道我们可以用 decltype(*beg) 来获取此表达式的类型。 但是,在编译器遇到函数的参数列表之前,beg 都是不存在的。为此,我们需要使用尾置返回类型。
2021-02-20
4 min read
code
C++ 模板系列小结06-可变参数模板特性
C++11 中引入了可变参数模板的特性,可变参数模板就是一个接受可变数目参数的模板函数或者模板类。 可变数目的参数被称为参数包,存在如下两种参数包: 模板参数包:表示零个或多个模板参数 函数参数包:表示零个或多个函数参数 具体如下所示,声明了一个可变参数函数模板。 // Args 是一个模板参数包;rest 是一个函数参数包 // Args 表示零个或多个模板类型参数 // rest 表示零个或多个函数参数 template <typename T,typename... Args> void foo(const T &t, const Args&... rest);
2021-02-20
3 min read
code
C++ 中的多线程的使用和线程池建设
C++ 11 引入了 std::thread 标准库,方便了多线程相关的开发工作。 说到多线程开发,可不仅仅是创建一个新线程就好了,不可避免的要涉及到线程同步的问题。 而保证线程同步,实现线程安全,就要用到相关的工具了,比如信号量、互斥量、条件变量、原子变量等等。 这些名词概念都是来操作系统里面引申来的,并不是属于哪一种编程语言所特有的,在不同语言上的表现形式不一样,但其背后的原理是一致的。 C++ 11 同样引入了 mutex、condition_variable、future 等实现线程安全的类,下面就来一一了解它们。
2021-02-09
8 min read
code
C++ 模板系列小结05-模板类型作为模板参数
在前面的文章中,模板参数除了是类型之外,还可以是非类型参数,但只有整型和指向外部链接对象的指针才可以。 除此之外,模板类型同样可以作为类型参数,并且还很有用处。
2021-02-09
3 min read
code
C++ 模板系列小结04-类模板中的成员模板
在之前的类模板中,只在类声明时用了 typename 指定模板参数类型,之后的成员函数复用模板参数类型。 但实际上,类成员也可以是模板,嵌套类和成员函数都可以作为模板。
2021-02-09
1 min read
code
C++ 模板系列小结03-在模板中指定变量类型
在之前的代码示例中,频繁用到 typename 关键字。 它的作用就是声明模板参数是类型参数(对于非类型参数,之前的文章也有提到了),也可以用 class 关键字来代替,但为了避免歧义,大多还是使用 typename 了。 除此之外,在模板的定义也可以使用 typename 关键字,用来指定变量的类型。
2021-02-09
1 min read
code
C++ 模板系列小结02-非类型模板参数
前面已经介绍了函数模板和类模板,还介绍了类模板的默认参数,在代码示例中都是用具体类型来作为模板参数的。 实际上,模板参数不局限于类型,普通值也可以作为模板参数,也就是本篇要讲的内容:非类型模板参数。
2021-02-08
2 min read
code
C++ 模板系列小结01-函数模板和类模板
现如今,掌握 C++ 模板技巧并且熟练使用可以说是能力进阶的必备内容了。 在一些优秀的开源项目中经常能看到模板的使用,要是不了解其使用方法,对分析源码都会有些阻碍。 推荐阅读《C++ Templates 中文版》一书,或许可以让你对 C++ 模板有个更加系统的概念,同时辅助阅读网上相关的博客文章加深理解,在代码实践中去掌握提高。 C++ 模板主要可以分为函数模板和类模板,这次就是介绍它们两个。
2021-02-08
4 min read
code
Java 显式锁 Lock 与条件队列
在 Java 5.0 之前,在协调对共享对象的访问时可以使用的机制只有 synchronized 内置锁和 volatile 关键字。 Java 5.0 增加了一种新的机制:Lock 显式锁,当内置锁 synchronized 不适用时,它就可以作为一种新的选择。 回顾一下内置锁 synchronized 的使用: // synchronized关键字用法示例 public synchronized void add(int t){// 同步方法 this.v += t; } public static synchronized void sub(int t){// 同步静态方法 value -= t; } public int decrementAndGet(){ synchronized(obj){// 同步代码块 return --v; } } 内置锁不需要显式的获取和释放,任何一个对象都能作为一把内置锁。 当 synchronized 作用于普通方法时,锁对象是 this 。 当 synchronized 作用于静态方法时,锁对象是当前类的 Class 对象。 当 synchronized 作用于代码块时,锁对象是 synchronized(obj) 中的这个 obj 对象。
2018-11-19
10 min read
code
C++ 标准容器库小结
《C++ Primer》 第五版笔记摘录~~~
2018-11-19
16 min read
code
««
«
1
2
»
»»