D语言的成员函数模板

DMD 0.166 特性列表中有一条:
* ncorporated Oskar Linde's patches to support member templates.

当时没注意,今天看到邮件列表中的一个[url=http://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D.announce&artnum=5986]帖子[/url]。才发现已经支持成员函数模板了,不过是不是在0.166中支持的就不清楚了。

没有成员函数模板的模板是不完整的。一个简单的例子,源于我的另一篇“[url=http://qiezi.iteye.com/admin/show/26651]泛型矩阵类[/url]”:

[code]
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;
}
[/code]

[注:仅演示类型匹配特性]

可见模板在处理强类型方面的作用。不过目前为止似乎还没有办法实现“成员函数模板参数类型自动推导”,一个小小的遗憾,否则上面的测试代码可以修改为:

[code]
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;
}
[/code]

C++模板早已实现了这个特性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值