从D语言看C++ Template语法

从D语言看C++ Template语法

许式伟 (版权声明)
2007-5-2

D语言是一门新兴的语言,它试图结合C/C++性能上的高效,同时又象Python、Ruby等“现代”语言那样具备高效的生产力。CSDN曾经对其做过专题报道。

我本人蛮喜欢D语言的语法,觉得当之无愧的简洁典雅。当然需要澄清的是,我不想让人误会,我不是要倡导“C/C++已死,请使用D语言”。本文也没有打算全面去讨论D语言。这里我只是把目光锁定在D语言的Template语法上。

我们先来看看C++中如何实现阶乘。

1)用函数实现阶乘:

intfactorial(intn)
{
if(n==0)return1;
elsereturnn * factorial(n-1);
}

voidtest()
{
printf(
4!=%d ,factorial(4));
}

2)用模板实现的阶乘:

template<intn>structfactorial
{
enum{ result=n*factorial<n-1>::result};
};

template
<>structfactorial<0>
{
enum{result=1};
};

voidtest()
{
printf(
4!=%d ,factorial<4>::result);
}

再来看看D语言中的阶乘。普通函数我们就不写了,这里列出D语言支持的两套模板语法:

1)和C/C++类似的模板文法:

templatefactorial(intn)
{
constfactorial=n*factorial!(n-1);
}

templatefactorial(
intn:0)
{
constfactorial=1;
}

voidtest()
{
writefln(factorial
!(4));//prints24
}

2)D语言引入的新型模板文法:

templatefactorial(intn)
{
staticif(n==0)
constfactorial=1;
else
constfactorial=n*factorial!(n-1);
}

比较一下,我们不难理解,D语言对C++的模板文法主要做了以下2点改变:

1)将C++模板的<T>改为了!(T)。并将 factorial<n>::result 形式改为了 factorial!(n)。

2)引入了新的 staticif 文法。

引起我注意的是改变2)。很明显,D语言在试图让写模板的人思维方法可以象写普通的函数那样进行。这是一个很有意义的尝试。我们设想一下,如果C++ Template也来支持 staticif 文法:

template<intn>structfactorial
{
staticif(n==0)
enum{result=1};
else
enum{result=n*factorial<n-1>::result};
};

也许这会是一个不错的尝试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值