Unity 的基本操作主要是对游戏对象的操作,包括观察视角、平移、缩放、旋转这些。
更具体一点就是控制面板上这几个按键如何操作:

在使用模板时可以显示指定模板类型,尤其是针对有返回类型的模板,显示指定可以避免类型转换带来的困扰。
但有时候显示指定模板实参类型会给用户增添额外负担,而且不会带来什么好处。
比如如下代码,接受表示序列的一对迭代器和返回序列中的一个元素的引用:
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 都是不存在的。为此,我们需要使用尾置返回类型。
[阅读全文]C++11 中引入了可变参数模板的特性,可变参数模板就是一个接受可变数目参数的模板函数或者模板类。
可变数目的参数被称为参数包,存在如下两种参数包:
具体如下所示,声明了一个可变参数函数模板。
// Args 是一个模板参数包;rest 是一个函数参数包
// Args 表示零个或多个模板类型参数
// rest 表示零个或多个函数参数
template <typename T,typename... Args>
void foo(const T &t, const Args&... rest);
C++ 11 引入了 std::thread 标准库,方便了多线程相关的开发工作。
说到多线程开发,可不仅仅是创建一个新线程就好了,不可避免的要涉及到线程同步的问题。
而保证线程同步,实现线程安全,就要用到相关的工具了,比如信号量、互斥量、条件变量、原子变量等等。
这些名词概念都是来操作系统里面引申来的,并不是属于哪一种编程语言所特有的,在不同语言上的表现形式不一样,但其背后的原理是一致的。
C++ 11 同样引入了 mutex、condition_variable、future 等实现线程安全的类,下面就来一一了解它们。
[阅读全文]在之前的代码示例中,频繁用到 typename 关键字。
它的作用就是声明模板参数是类型参数(对于非类型参数,之前的文章也有提到了),也可以用 class 关键字来代替,但为了避免歧义,大多还是使用 typename 了。
除此之外,在模板的定义也可以使用 typename 关键字,用来指定变量的类型。
前面已经介绍了函数模板和类模板,还介绍了类模板的默认参数,在代码示例中都是用具体类型来作为模板参数的。
实际上,模板参数不局限于类型,普通值也可以作为模板参数,也就是本篇要讲的内容:非类型模板参数。
[阅读全文]现如今,掌握 C++ 模板技巧并且熟练使用可以说是能力进阶的必备内容了。
在一些优秀的开源项目中经常能看到模板的使用,要是不了解其使用方法,对分析源码都会有些阻碍。
推荐阅读《C++ Templates 中文版》一书,或许可以让你对 C++ 模板有个更加系统的概念,同时辅助阅读网上相关的博客文章加深理解,在代码实践中去掌握提高。
C++ 模板主要可以分为函数模板和类模板,这次就是介绍它们两个。
[阅读全文]