DMD 0.166 特性列表中有一条:
* ncorporated Oskar Linde's patches to support member templates.
当时没注意,今天看到邮件列表中的一个
帖子。才发现已经支持成员函数模板了,不过是不是在0.166中支持的就不清楚了。
没有成员函数模板的模板是不完整的。一个简单的例子,源于我的另一篇“
泛型矩阵类”:
class Matrix(T, int R, int C){
static assert(R > 0 && C > 0);
Matrix!(T, R, C1) opMul(int C1)(Matrix!(T,C,C1) rhs){
return null;
}
}
int main()
{
{
Matrix!(int, 3, 4) m1;
Matrix!(int,4,3) m2;
// 维度匹配,可以相乘
Matrix!(int, 3, 3) m3 = m1.opMul!(3)(m2);
Matrix!(int, 8, 3) m4;
// 维度不匹配,无法相乘
//auto m5 = m1 * m4;
// 维度匹配,可以相乘
Matrix!(int, 8, 4) m5 = m4.opMul!(4)(m1);
}
return 0;
}
[注:仅演示类型匹配特性]
可见模板在处理强类型方面的作用。不过目前为止似乎还没有办法实现“成员函数模板参数类型自动推导”,一个小小的遗憾,否则上面的测试代码可以修改为:
int main()
{
{
Matrix!(int, 3, 4) m1;
Matrix!(int,4,3) m2;
// 维度匹配,可以相乘
Matrix!(int, 3, 3) m3 = m1 * m2;
Matrix!(int, 8, 3) m4;
// 维度不匹配,无法相乘
//auto m5 = m1 * m4;
// 维度匹配,可以相乘
Matrix!(int, 8, 4) m5 = m4 * m1;
}
return 0;
}
C++模板早已实现了这个特性。
分享到:
相关推荐
类的定义格式分为说明部分和实现部分 类中一般包含有成员函数和数据成员 类中成员有3种访问权限 成员函数都是公有的,数据成员都是私有的 ~D 关于类中成员函数的描述中,错误的是( )。...
11.4.3 istream类中的其他成员函数(Peek、Putback和ignore) 11.4.4 类型安全的I/0 11.5 成员函数read、gcount和write的无格式输人/输出 11.6 流操纵算子 11.6.1 整数流的基数:流操纵算子dec、oct、hex和...
类的成员函数 D.以上都不对 16、如果一个类至少有一个纯虚函数,那么就称该类为( )。 A.抽象类 B.派生类 C.纯基类 D.以上都不对 17、下面关于友元的描述中,错误的是( )。 A.友元函数可以访问该类的私有...
第一章导论 1 1.1 从图形处理到通用并行计算 1 1.2 CUDATM:一种通用并行计算架构 3 1.3 一种可扩展的编程模型 3 1.4 文档结构 4 第二章编程模型 7 2.1 内核 7 2.2 线程层次 8 2.3 存储器层次 11 ...
11.4.3 istream类中的其他成员函数(Peek、Putback和ignore) 11.4.4 类型安全的I/0 11.5 成员函数read、gcount和write的无格式输人/输出 11.6 流操纵算子 11.6.1 整数流的基数:流操纵算子dec、oct、hex和...
6.6 成员函数的声明和定义 6.7 内联函数 6.7.1 普通内联函数 6.7.2 内联成员函数 6.8 头文件与源文件 6.9 const成员函数 6.10构造函数 6.11默认构造函数 6.12析构函数 6.13析构对象数组 6.14总结 第7章 循环语句 ...
13.9.1 在虚函数中调用成员函数 13.9.2 3种调用虚函数的方式比较 13.10被继承的虚函数仍然是虚函数 13.11系统是如何调用虚函数的 13.12在虚函数中使用成员名限定 13.13虚析构函数 13.14总结 第14章 数组 ...
斯特里博格 这是一个集合库,其中包含我...模板罗宾函数 foreach 展开的编译时间 聚合成员自省 编译时稳定排序 - 具有编译时代码生成的特定容器: 多键映射 - 操作类似于 Boost MPL 映射,您可以定义多个键值类型对。
) 下面是整个项目的文档目录: <br> * 自动化C++程序设计 * 基础篇 * C++里的模板语言 * 静态诊断 * 为什么说模版是C++的子语言 * 静态数学运算 * 静态选择结构 * 静态循环结构...
21.3 使用成员函数重载二元运算符 21.4 使用friend函数重载二元运算符 21.5 重载一元运算符 21.6 含有指针数据成员的类 21.7 等效阻抗的计算 21.8 常犯的错误 21.9 本章重点 21.10 本章练习 第22章 面向对象...
A.5 成员函数模板 A.6 总结 附录B ATL头文件 附录C 移植到ATL 8 C.1 字符串、字符集和转换 C.2 与MFC共享的类 C.3 实现COM服务器 C.4 ActiveX控件和控件容纳 C.5 ATL_MIN_CRT变化 C.6 总结 附录D 属性化ATL D.1 ATL ...
1.6.1 函数模板 1.6.2 类模板 1.6.3 Object、Comparable和例子 1.6.4 函数对象 1.6.5 类模板的分离编译 1.7 使用矩阵 1.7.1 数据成员、构造函数和基本访问函数 1.7.2 ...
e. 如有可能,请建立一个存储商品名称和数量的文本文件,并为二叉搜索树建立一个成员函数SetupInventory(),用于从该文本文件中读取库存商品的数据, 实验报告要求: 1、 按要求记录下二叉搜索树的完整实验...
在MFC中对消息的处理利用了消息映射的方法,该方法的基础是宏定义实现,通过宏定义将消息分派到不同的成员函数进行处理。下面简单讲述一下这种方法的实现方法: 代码如下 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd...
多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、double、boolean和short。 java....