科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件从D语言看C++ Template语法

从D语言看C++ Template语法

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

D语言是一门新兴的语言,它试图结合C/C++性能上的高效,同时又象Python、Ruby等“现代”语言那样具备高效的生产力

作者: 许式伟 来源:CSDN 2008年1月11日

关键字: 语法 Template C++ D语言 Linux

  • 评论
  • 分享微博
  • 分享邮件

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

1)用函数实现阶乘:

int factorial(int n)
{
   
if (n == 0return 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++模板的<T>改为了!(T)。并将 factorial<n>::result 形式改为了 factorial!(n)。

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

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


查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章