`
javatoyou
  • 浏览: 1072168 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

从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};
};

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

分享到:
评论

相关推荐

    C++语言核心 C++语言核心 C++语言核心 C++语言核心 C++语言核心 C++语言核心 C++语言核心 C++语言核心 C++语言核心 C++

    【C++语言核心详解】 C++是一种强大的、通用...学习C++语言核心,不仅需要理解语法和概念,还需要掌握良好的编程实践,如设计模式、异常安全、资源管理等。熟练掌握C++,可以让开发者编写出高性能、可维护的软件系统。

    C++语言大全 C++语言大全 C++语言大全 C++语言大全

    "C++语言大全"通常指的是涵盖C++语法、编程技巧、标准库使用、设计模式等多个方面的全面教程或参考资料。下面将详细讨论C++语言的关键知识点。 一、基础语法 C++是C语言的扩展,它引入了类和对象的概念,实现了面向...

    C++ Template

    C++模板是C++编程语言中的一个重要特性,它允许程序员创建泛型代码,即能够处理多种数据类型的代码。模板在C++中分为两种主要类型:函数模板和类模板。 函数模板是定义一个可以处理多种数据类型的函数的方式。通过...

    C++ template教程 中文版和英文版

    C++模板是C++语言中的一个强大特性,它允许程序员创建泛型代码,即能够处理多种数据类型的代码。模板在C++中分为两种主要类型:函数模板和类模板。本教程将深入探讨这两种模板以及相关的知识点。 首先,我们来看...

    语法分析器 c++实现

    本主题主要关注使用C++语言实现语法分析器的相关知识。 首先,我们需要了解什么是语法分析。在编译器设计中,语法分析是将输入的源代码字符串分解成一系列有意义的符号序列,即语法树的过程。这个过程基于一套定义...

    C++语法分析器-英文版

    C++模板是该语言中一项强大但往往被误解的功能,其语法类似于其他语言中的参数化类(如Java),但由于C++支持模板特化,其语义与参数化类大相径庭。模板特化在C++内部提供了一个图灵完备的子语言,在编译时执行。...

    C++ template 全览 第一篇(1~5节)(简体中文)

    ### C++ Template 全览知识点概述 #### 一、引言 C++模板自问世以来,在不断发展中成为了C++编程语言的重要组成部分。然而,由于其复杂性和灵活性,模板经常引发误解和争议。随着越来越多的开发者认识到模板的强大...

    C++程序设计语言 The C++ Programming Language

    《C++程序设计语言》是Bjarne Stroustrup所著的经典C++编程教材,第四版的出版进一步完善了对C++11及后续标准的解释。这本书详细介绍了C++语言的基础、高级特性以及现代编程实践,对于学习和理解C++编程语言具有极其...

    高级语言C++程序设计编程范例与精解

    《高级语言C++程序设计编程范例与精解》是一本深入探讨C++编程语言的教材,旨在帮助读者从基础知识到高级概念全面掌握C++。作为《高级语言C++程序设计》的配套书籍,它提供了丰富的实例和详尽的解析,以实践驱动的...

    C++语言程序设计第四版郑莉

    《C++语言程序设计》是郑莉教授与董渊教授合作编著的一本经典教材,主要面向初学者和有一定编程基础的学习者,旨在系统地介绍C++编程语言的基础知识和高级特性。这本书的第五版是对第四版的更新和完善,旨在跟上C++...

    C++编程语言思维导图

    C++编程语言是一种强类型、静态类型的面向对象编程语言,由Bjarne Stroustrup于1983年在C语言的基础上发展而来。它在设计上强调程序的效率和灵活性,是许多系统软件、游戏开发、科学计算以及高性能应用的重要选择。...

    C++Template(中文版)

    《C++ Template(中文版)》是一本深入探讨C++模板技术的专业书籍,它为已经有一定C++基础的读者提供了全面、深入的模板知识。模板是C++编程中的一项核心特性,也是现代C++编程的重要工具,对于提高代码的复用性和效率...

    c++基础语法&demo.zip

    总结,C++是一种功能强大的语言,不仅具备基础语法,还支持高级特性如面向对象编程和泛型编程。通过"C++基础语法&demo"的实例学习,可以帮助初学者快速掌握C++的核心概念,进一步提升编程能力。

    C++template(c++图书)

    C++ 模板是C++编程语言中的一个强大特性,它允许程序员创建泛型代码,即可以在多种数据类型上工作的代码。C++模板分为两类:函数模板和类模板。理解并熟练掌握C++模板是提升编程效率和代码复用的关键。 函数模板...

    C++语言程序设计课件

    C++是一种广泛应用于系统软件、应用软件、游戏开发、设备驱动等领域的高级编程语言,由Bjarne Stroustrup在C语言的基础上发展而来,增加了面向对象的特性。本课件由清华大学教授郑莉主讲,旨在帮助学习者深入理解C++...

    C++Template(侯捷)

    《C++ Template》是侯捷先生撰写的一本深入探讨C++模板技术的专业书籍,主要针对C++编程者,特别是对模板有深入需求的开发者。这本书以其详尽的讲解和丰富的实例,帮助读者理解和掌握C++模板这一强大的元编程工具。 ...

    C++语言参考 C++语言参考

    C++语言参考文档是学习和理解C++语法、库函数、模板、类、对象、继承等关键概念的重要资源。这个文档通常包含了详细的语法解释、示例代码、标准库的描述,以及如何有效地利用C++进行编程的指导。下面将深入探讨C++的...

    C++语言程序设计 第4版 学生用书

    《C++语言程序设计 第4版 学生用书》是C++编程学习的重要参考资料,由资深编程专家撰写,旨在帮助学生深入理解C++语言的基本概念、语法结构以及编程技巧。这本书是第4版,意味着它经过了多次修订和完善,以适应现代...

Global site tag (gtag.js) - Google Analytics