随笔分类 -  模板

摘要:尝试将private定义成public--报错 redeclared with different access 查阅材料:https://stackoverflow.com/questions/47839718/sstream-redeclared-with-public-access-compi 阅读全文
posted @ 2023-02-16 08:41 dzqabc 阅读(449) 评论(0) 推荐(0)
摘要:转自:https://www.cnblogs.com/zhoug2020/p/6581477.html 模板编程中如果要特化或偏特化(局部特化)一个类模板,需要特化该类模板的所有成员函数。类模板中大多数成员函数的功能可能是一模一样的,特化时我们可能只需要重新实现1、2个成员函数即可。在这种情况下,如 阅读全文
posted @ 2019-08-04 09:59 dzqabc 阅读(1801) 评论(0) 推荐(0)
摘要:实际上有三种类型模板参数:类型模板参数、无类型模板参数和模板模板参数(以模板作为模板的参数)。 1、类型模板参数 类型模板参数是我们使用模板的主要目的。我们可以定义多个类型模板参数: template class Grid {...} 同样,也可以为类型模板参数指定默认值: #include ... 阅读全文
posted @ 2017-10-24 23:13 dzqabc 阅读(10715) 评论(1) 推荐(1)
摘要:By SmartPtr(http://www.cppblog.com/SmartPtr/) 模板特化不同于模板的实例化,模板参数在某种特定类型下的具体实现称为模板的特化,以实现特定类型下非通用行为。模板特化有时也称之为模板的具体化,分别有函数模板特化和类模板特化。 针对一个模板参数的类模板特化的几种 阅读全文
posted @ 2017-10-24 23:08 dzqabc 阅读(10251) 评论(0) 推荐(0)
摘要:// 排序插入,可以指定在一定范围内排重插入,主要为了指定起始位置,在排序插入时可以避免重复搜索 template<typename IT, typename T> inline static bool SCOFindFirst(IT & iter, const IT & end, const T 阅读全文
posted @ 2016-03-31 23:21 dzqabc 阅读(9) 评论(0) 推荐(0)
摘要:template class Widget; // uses "class"template class Widget; // uses "typename" 答案:没什么不同。在声明一个 template type parameter(模板类型参数)的时候,class 和 typename 意味... 阅读全文
posted @ 2014-10-25 22:16 dzqabc 阅读(2917) 评论(0) 推荐(2)
摘要:错误1: template<class T>void temp(std::vector<T>& container){ std::vector<T>::const_iterator p; //error: expected ‘;’ before ‘p’ for(p = container.begin 阅读全文
posted @ 2014-10-25 21:51 dzqabc 阅读(6846) 评论(0) 推荐(1)
摘要:1.模板函数(模板类的成员函数)只有在被使用的时候才会被实例化。在实例化之前也只会进行有限的错误检查。 这样子有两个好处: 1.换来时间和空间效率,可以省去无用函数编译时间和编译生成代码所占用存储。 2.(模板类的成员函数)可以规避掉某些场景下的编译错误。某模板类在场景1下用到且只用到成员函数f1和 阅读全文
posted @ 2013-05-21 07:40 dzqabc 阅读(590) 评论(0) 推荐(0)
摘要:迭代器失效 vector: 1.当插入(push_back)一个元素后,end操作返回的迭代器肯定失效。 2.当插入(push_back)一个元素后,capacity返回值与没有插入元素之前相比有改变,则需要重新加载整个容器,此时first和end操作返回的迭代器都会失效。 3.当进行删除操作(er 阅读全文
posted @ 2011-12-18 23:45 dzqabc 阅读(306) 评论(0) 推荐(0)
摘要:vector的元素可以是任意类型T,但必须具备赋值和拷贝能力(具有public 拷贝构造函数和重载的赋值操作符). 其实很容易理解,自定义一些模板时,同样会需要其实例化类型具备默写操作(如大于小于操作等。) 下面一个自定义模板类就需要dump函数了:template<class T>inline static void Dumpvector(const std::vector<T *> &vvector){ std::vector<T *> ::iterator pvectorIt = vvector.begin(); for(; pvectorIt 阅读全文
posted @ 2011-10-15 00:47 dzqabc 阅读(246) 评论(0) 推荐(0)
摘要:(摘自effective C++) 之前使用模板时,只记得有typename,class做参数的。当再看到时,才感觉还是挺神奇。 模板参数并不局限于类型,可以使用编译器内置类型。 template告诉编译器,虽有的定义中将包含一个或多个未确定的量(常量或类型),当该模板产生实际代码时,必须制定这些量 阅读全文
posted @ 2011-09-24 23:33 dzqabc 阅读(438) 评论(0) 推荐(0)
摘要:1.定义函数模板 2.使用模板函数 输出结果 3.确定返回的参数 若两个参数不正确,或者不支持模板定义的特性,编译时则会出错 4.多个模板参数 示例 返回值是T1,所以返回是int类型,结果是42,出错了 定义3个参数,第3个参数用于表示返回值类型 测试 返回正确的42.1 5.模板函数重载 重载函 阅读全文
posted @ 2011-06-13 01:05 dzqabc 阅读(2065) 评论(0) 推荐(0)
摘要:c++模板类/模板函数的声明与定义应该放在头文件里,不要分开来写类中函数的声明与定义(比如在.H文件里声明某个成员函数,在.CPP文件里定义该成员函数),这样会导致连接错误。所应该将模板类/模板函数的定义与声明写在一个.h文件里。可以理解为:模板函数并非函数定义,不能放在CPP文件中。模板函数的函数定义是用编译器编译时生成的。 阅读全文
posted @ 2011-04-15 00:51 dzqabc 阅读(1014) 评论(0) 推荐(0)
摘要:templateinline static void Dumpvector(const std::vector &vvector){ std::vector ::iterator pvectorIt = vvector.begin(); for(; pvectorIt != vvector.end(... 阅读全文
posted @ 2011-04-15 00:48 dzqabc 阅读(676) 评论(0) 推荐(0)