原创作者: qiezi
阅读:808次
评论:0条
更新时间:2011-05-26
DMD 0.166 特性列表中有一条:
* ncorporated Oskar Linde's patches to support member templates.
当时没注意,今天看到邮件列表中的一个帖子。才发现已经支持成员函数模板了,不过是不是在0.166中支持的就不清楚了。
没有成员函数模板的模板是不完整的。一个简单的例子,源于我的另一篇“泛型矩阵类”:
[注:仅演示类型匹配特性]
可见模板在处理强类型方面的作用。不过目前为止似乎还没有办法实现“成员函数模板参数类型自动推导”,一个小小的遗憾,否则上面的测试代码可以修改为:
C++模板早已实现了这个特性。
* 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++模板早已实现了这个特性。
评论 共 0 条 请登录后发表评论