模板和元编程

fpcc17 天前
c++·模板和元编程
跟我学C++中级篇——Concepts的循环依赖循环依赖,这个东西非常可怕。如果是简单的依赖还好说,直接大家都可以看出来。但在复杂的场景下,如果产生这种循环依赖,很难发现,而且问题也可能比较隐藏,错误提示也不友好。 产生循环依赖的原因简单的说就是互相将彼此的任务完成当前自己任务完成的前提。从这个角度看,线程的死锁、类(头文件)、条件判断以及类似的场景都有可能产生循环依赖。不过相对于线程的死锁广泛流行为开发者熟知,条件判断可能太简单,基本很难有人写出这种低级错误,即使真写出来也很容易发现。 但是在C++编程中,模板编程相对于开发者们来说,本身就是一小众的
fpcc23 天前
c++·模板和元编程
模板编程—C++不支持模板分离编译分析模板的编译相对于普通编程的编译,要复杂不少。比如一个模板函数,在不同的编译单元被include,那么会生成多个相同签名的函数,这就需要编译器后期进行相关的去重处理。而且这种代码多了,编译时,相关的编译部分体积也会变大,也就是常说的代码膨胀。另外,还需要处理ADL和CTAD(前面都分析过)等相关的细节,直到链接时对相关函数的具体定位(两阶段名称查找)等等,都相较于非模板代码编译需要更多的步骤和处理过程。 这里重点分析一下,为什么在模板编程中见到的模板代码都定义在头文件中,而不是象普通的代码声明在头文件而定义
我是有底线的