从D语言看C++ Template语法
来源:互联网 发布:手机录音剪切软件 编辑:程序博客网 时间:2024/06/06 19:23
从D语言看C++ Template语法
许式伟 (版权声明)
2007-5-2
D语言是一门新兴的语言,它试图结合C/C++性能上的高效,同时又象Python、Ruby等“现代”语言那样具备高效的生产力。CSDN曾经对其做过专题报道。
我本人蛮喜欢D语言的语法,觉得当之无愧的简洁典雅。当然需要澄清的是,我不想让人误会,我不是要倡导“C/C++已死,请使用D语言”。本文也没有打算全面去讨论D语言。这里我只是把目光锁定在D语言的Template语法上。
我们先来看看C++中如何实现阶乘。
1)用函数实现阶乘:
int factorial(int n)
{
if (n == 0) return 1;
else return n * factorial(n-1);
}
void test()
{
printf(“4! = %d “, factorial(4));
}
2)用模板实现的阶乘:
template <int n> struct factorial
{
enum { result = n * factorial<n-1>::result };
};
template <> struct factorial<0>
{
enum { result = 1 };
};
void test()
{
printf(“4! = %d “, factorial<4>::result);
}
再来看看D语言中的阶乘。普通函数我们就不写了,这里列出D语言支持的两套模板语法:
1)和C/C++类似的模板文法:
template factorial(int n)
{
const factorial = n * factorial!(n-1);
}
template factorial(int n : 0)
{
const factorial = 1;
}
void test()
{
writefln(factorial!(4)); // prints 24
}
2)D语言引入的新型模板文法:
template factorial(int n)
{
static if (n == 0)
const factorial = 1;
else
const factorial = n * factorial!(n-1);
}
比较一下,我们不难理解,D语言对C++的模板文法主要做了以下2点改变:
1)将C++模板的
2)引入了新的 static if 文法。
引起我注意的是改变2)。很明显,D语言在试图让写模板的人思维方法可以象写普通的函数那样进行。这是一个很有意义的尝试。我们设想一下,如果C++ Template也来支持 static if 文法:
template <int n> struct factorial
{
static if (n == 0)
enum { result = 1 };
else
enum { result = n * factorial<n-1>::result };
};
也许这会是一个不错的尝试。
- 从D语言看C++ Template语法
- 从D语言看C++ Template语法
- 从D语言看C++ Template语法
- 从D语言看C++ Template语法
- 从D语言看C++ Template语法
- 从D语言看C++ Template语法
- 从汇编看c语言函数调用
- 从汇编看c语言函数调用
- 从汇编角度看C语言类型转换
- 从交换两个变量值看c语言学习历程
- 【整理】C语言从源码看字符串函数
- 从学c++语言开始到能开发3D游戏需要看的书籍
- C语言必看!
- 从c语言快速过渡到java语言(java语言与c语言语法区别概述)
- [C/C++]_[简单例子看模板template的特性]
- 从语言层次的角度看为什么要精通C语言
- 从语言层次的角度看为什么要精通C语言
- C语言基本语法
- VisualFC - WTL/WinxGUI可视化开发环境
- 我为什么选择了Erlang?
- 启动Erlana: Erlang Analytics项目
- 欢迎使用 FreeCode for VS60/VS2005 Add-in
- Unix搭积木思想与Google Code Wiki
- 从D语言看C++ Template语法
- [转]php + xapian extension的安装
- 自动化(Automation)基础概念:接口描述语言(IDL)与类型库(TypeLib)
- Windows程序调试系列: 使用VC++生成调试信息
- C++内存管理变革(4):boost::object_pool与gc allocator
- 停用笔记本自带键盘的一方法
- 自动化(Automation)基础概念:二次开发接口(API)与插件(Addin)
- [转]用 C 语言编写一个网络蜘蛛
- 自动化(Automation)基础概念:变体(Variant)与Dispatch调用(IDispatch)