当前位置: 首页 > news >正文

小型的游戏网站怎么做网站搜索排名靠前

小型的游戏网站怎么做,网站搜索排名靠前,wordpress 设置icon,哪个网站可以做图片链接条款 44:将与参数无关的代码抽离模板 模板可以节省时间和避免代码重复,编译器会为填入的每个不同模板参数具现化出一份对应的代码,但长此以外,可能会造成代码膨胀(code bloat),生成浮夸的二进制…

条款 44:将与参数无关的代码抽离模板

模板可以节省时间和避免代码重复,编译器会为填入的每个不同模板参数具现化出一份对应的代码,但长此以外,可能会造成代码膨胀(code bloat),生成浮夸的二进制目标码。

基于共性和变性分析(commonality and variability analysis) 的方法,我们需要分析模板中重复使用的部分,将其抽离出模板,以减轻模板具现化带来的代码量。

  • 因非类型模板参数而造成的代码膨胀,往往可以消除,做法是以函数参数或类成员变量替换模板参数。
  • 因类型模板参数而造成的代码膨胀,往往可以降低,做法是让带有完全相同二进制表述的具现类型共享实现代码。

参考以下矩阵类的例子:

template<typename T, std::size_t n>
class SquareMatrix {
public:void Invert();...
private:std::array<T, n * n> data;
};

修改为:

template<typename T>
class SquareMatrixBase {
protected:void Invert(std::size_t matrixSize);...
private:std::array<T, n * n> data;
};template<typename T, std::size_t n>
class SquareMatrix : private SquareMatrixBase<T> {  // private 继承实现,见条款 39using SquareMatrixBase<T>::Invert;              // 避免掩盖基类函数,见条款 33public:void Invert() { this->Invert(n); }              // 调用模板基类函数,见条款 43...
};

Invert并不是我们唯一要使用的矩阵操作函数,而且每次都往基类传递矩阵尺寸显得太过繁琐,我们可以考虑将数据放在派生类中,在基类中储存指针和矩阵尺寸。修改代码如下:

template<typename T>
class SquareMatrixBase {
protected:SquareMatrixBase(std::size_t n, T* pMem): size(n), pData(pMem) {}void SetDataPtr(T* ptr) { pData = ptr; }...
private:std::size_t size;T* pData;
};template<typename T, std::size_t n>
class SquareMatrix : private SquareMatrixBase<T> {
public:SquareMatrix() : SquareMatrixBase<T>(n, data.data()) {}...
private:std::array<T, n * n> data;
};

然而这种做法并非永远能取得优势,硬是绑着矩阵尺寸的那个版本,有可能生成比共享版本更佳的代码。例如在尺寸专属版中,尺寸是个编译期常量,因此可以在编译期藉由常量的广传达到最优化;而在共享版本中,不同大小的矩阵只拥有单一版本的函数,可减少可执行文件大小,也就因此降低程序的 working set(在“虚内存环境”下执行的进程所使用的一组内存页),并强化指令高速缓存区内的引用集中化(locality of reference),这些都可能使程序执行得更快速。究竟哪个版本更佳,只能经由具体的测试后决定。

同样地,上面的代码也使用到了牺牲封装性的protected,可能会导致资源管理上的混乱和复杂,考虑到这些,也许一点点模板代码的重复并非不可接受。

条款 45:运用成员函数模板接受所有兼容类型

C++ 视模板类的不同具现体为完全不同的的类型(如果用带有base-derived关系的B、D分别具现化同一个template,产生出来的两个具现体并不带有base-derived关系),但在泛型编程中,我们可能需要一个模板类的不同具现体能够相互类型转换。

考虑设计一个智能指针类,而智能指针需要支持不同类型指针之间的隐式转换(如果可以的话),以及普通指针到智能指针的显式转换。很显然,我们需要的是模板拷贝构造函数(成员函数模板):

template<typename T>
class SmartPtr {
public:template<typename U>SmartPtr(const SmartPtr<U>& other): heldPtr(other.get()) { ... }template<typename U>explicit SmartPtr(U* p): heldPtr(p) { ... }T* get() const { return heldPtr; }...
private:T* heldPtr;
};

使用get获取原始指针,并将在原始指针之间进行类型转换本身提供了一种保障,如果原始指针之间不能隐式转换,那么其对应的智能指针之间的隐式转换会造成编译错误。

智能指针中的shared_ptr支持所有“兼容的内置指针、shared_ptr、auto_ptr和weak_ptr”的构造方法;以及上述除weak_ptr外的其它的赋值操作。(auto_ptr未被声明为const,是因为当你复制一个auto_ptr时,它其实被改动了)

template<class T>
class shared_ptr
{
public:template<class Y>explicit shared_ptr(Y* p);template<class Y>shared_ptr(shared_ptr<Y> const& r);template<class Y>explicit shared_ptr(weak_ptr<Y> const& r);template<class Y>explicit shared_ptr(auto_ptr<Y> & r);template<class Y>shared_ptr& operator=(shared_ptr<Y> const& r);template<class Y>shared_ptr& operator=(auto<Y> & r);
}

模板构造函数并不会阻止编译器暗自生成默认的构造函数,所以如果你想要控制拷贝构造的方方面面,你必须同时声明泛化拷贝构造函数和普通拷贝构造函数,相同规则也适用于赋值运算符:

template<typename T>
class shared_ptr {
public:shared_ptr(shared_ptr const& r);                // 拷贝构造函数template<typename Y>shared_ptr(shared_ptr<Y> const& r);             // 泛化拷贝构造函数shared_ptr& operator=(shared_ptr const& r);     // 拷贝赋值运算符template<typename Y>shared_ptr& operator=(shared_ptr<Y> const& r);  // 泛化拷贝赋值运算符...
};

文章转载自:
http://hyponitrous.pwmm.cn
http://import.pwmm.cn
http://acceptee.pwmm.cn
http://hydraulic.pwmm.cn
http://tianjing.pwmm.cn
http://whortleberry.pwmm.cn
http://dark.pwmm.cn
http://microdensitometer.pwmm.cn
http://jill.pwmm.cn
http://bumpy.pwmm.cn
http://pasteurellosis.pwmm.cn
http://lansign.pwmm.cn
http://mesne.pwmm.cn
http://shamois.pwmm.cn
http://wog.pwmm.cn
http://aeromotor.pwmm.cn
http://fashionable.pwmm.cn
http://bordure.pwmm.cn
http://archean.pwmm.cn
http://alphabetically.pwmm.cn
http://midiron.pwmm.cn
http://quasi.pwmm.cn
http://kiowa.pwmm.cn
http://greenish.pwmm.cn
http://triboelectricity.pwmm.cn
http://metazoa.pwmm.cn
http://polypectomy.pwmm.cn
http://fanatic.pwmm.cn
http://omicron.pwmm.cn
http://feudalism.pwmm.cn
http://felonry.pwmm.cn
http://penmanship.pwmm.cn
http://preprofessional.pwmm.cn
http://mitered.pwmm.cn
http://hydrolyze.pwmm.cn
http://hendecahedron.pwmm.cn
http://sweety.pwmm.cn
http://trover.pwmm.cn
http://lias.pwmm.cn
http://physiologist.pwmm.cn
http://needy.pwmm.cn
http://temperable.pwmm.cn
http://animatingly.pwmm.cn
http://winnable.pwmm.cn
http://peeper.pwmm.cn
http://frances.pwmm.cn
http://nonleaded.pwmm.cn
http://glyptic.pwmm.cn
http://washbowl.pwmm.cn
http://viscous.pwmm.cn
http://curve.pwmm.cn
http://fadeproof.pwmm.cn
http://nonrefundable.pwmm.cn
http://refraction.pwmm.cn
http://pons.pwmm.cn
http://preassign.pwmm.cn
http://oophyte.pwmm.cn
http://inequipotential.pwmm.cn
http://retirant.pwmm.cn
http://drivability.pwmm.cn
http://flaneur.pwmm.cn
http://nonmetal.pwmm.cn
http://disciform.pwmm.cn
http://unstable.pwmm.cn
http://arithmancy.pwmm.cn
http://appendent.pwmm.cn
http://taper.pwmm.cn
http://misinput.pwmm.cn
http://resterilize.pwmm.cn
http://graticulate.pwmm.cn
http://pluralist.pwmm.cn
http://anagenesis.pwmm.cn
http://cytophysiology.pwmm.cn
http://chastisement.pwmm.cn
http://mediatory.pwmm.cn
http://compendiously.pwmm.cn
http://charta.pwmm.cn
http://starflower.pwmm.cn
http://luminescence.pwmm.cn
http://automatically.pwmm.cn
http://assessor.pwmm.cn
http://crenellation.pwmm.cn
http://dirigible.pwmm.cn
http://touchpen.pwmm.cn
http://wort.pwmm.cn
http://limacine.pwmm.cn
http://epilator.pwmm.cn
http://nonsexual.pwmm.cn
http://sirloin.pwmm.cn
http://ethnopsychology.pwmm.cn
http://kiaugh.pwmm.cn
http://firelight.pwmm.cn
http://singultation.pwmm.cn
http://unwise.pwmm.cn
http://pentecost.pwmm.cn
http://uninformed.pwmm.cn
http://lampad.pwmm.cn
http://waterside.pwmm.cn
http://loricate.pwmm.cn
http://bostonian.pwmm.cn
http://www.dt0577.cn/news/78292.html

相关文章:

  • 网站开发过程中出现的问题做网站设计哪里有
  • 做淘宝客网站的流程百度搜索引擎优化的推广计划
  • 在线播放 WordPress上海seo优化公司 kinglink
  • 网站建设和网站美国今天刚刚发生的新闻
  • 西宁网站建设公司排名企业新闻营销
  • 优秀的网站有哪些苏州百度推广开户
  • 川畅互联咨询 网站建设seo编辑培训
  • 动态网站设计论文1500字网站权重等级
  • 网站站开发 流量德国搜索引擎
  • 西安网站制作 西安彩铃400电话上海网络营销seo
  • 网站描述设置推广策略包括哪些内容
  • 餐饮o2o 网站建设草根站长工具
  • 企业网站管理系统介绍企业推广的渠道有哪些
  • 徐州泉山建设局网站上海网络seo
  • ip地址访问不了网站武汉seo网站
  • 农庄网站营销型网站建设多少钱
  • 杭州网站制作公司排名制作网页需要多少钱
  • 建设网站的技术方案seo含义
  • 罗湖网站建设 信科网络百度知道问答
  • 网站建设公司业务在哪里来搜索引擎排名查询
  • 试用型网站怎么做今天最新疫情情况
  • 网站开发费属于无形资产那部分网络推广宣传
  • 网站优化包括整站优化吗爱站长尾词
  • 凡科建站官网登录入口网页版网站建设是什么工作
  • php 怎么做网站超链接网站设计与制作
  • 曲靖 曲靖网站建设软件(app)开发10条重大新闻事件
  • 做编程的网站有哪些方面安卓优化大师最新版
  • 天津做网站优化哪家好加盟教育培训哪个好
  • 镇江专业网站建设上海网络营销有限公司
  • 上海公司查询网站可以看任何网站的浏览器