元编程


10

我刚刚开始作为C ++开发人员的旅程,并且最近我正在研究一个称为元编程的主题。到目前为止,我已经阅读了很多有关该主题的信息,并且没有几个问题。

  1. 反射在c ++中的用法:可能吗?根据我的理解,反射是一种元编程技术,它具有操纵程序状态的能力,其操纵可以是内省的或内省的。

  2. 反射架构和元级别架构有什么区别?元编程体系结构属于哪一类?

  3. 元编程分为两个级别:元级别和基础级别。在我的理解中,被调查的目标程序或系统是基础级别,而将在被调查的系统上运行的元程序是元级别。我对么?

还通过提供一些有关在C ++中进行模板元编程的准则来帮助我。
您可以为我推荐一些可行的示例,让我亲自尝试一下这种编程技术吗?


2
这个问题可能更多的是程序员而不是stackoverflow。前者更具理论性,而后者更具实用性。某些部分可以从视图的实际点可以容易地回答C ++不具有反射,但其他不相关的代码(反射和元层次结构之间的差异,例如)
大卫罗德里格斯- dribeas

这个SO答案解决了C ++为什么没有反射的问题:stackoverflow.com/q/359237/120163,以及一些较差的C ++技术,这些技术严重地模拟了C ++。
艾拉·巴克斯特

如果您对元编程非常感兴趣,建议您看一下D语言,在这一点上,它比C ++更清晰。
deadalnix11年

Answers:


10

元编程仅意味着您有能力编写可编写其他代码的代码(广义上)。C ++通过模板机制(基本上是一种类型安全的宏语言)来完成此任务。完全有可能仅应用模板扩展步骤,结果将是有效的无模板C ++代码。

反射是编程语言和/或运行时环境在运行时检查(并经常修改)自己的语言元素的能力。通常,反射语言提供表示语言元素(如类,方法,变量,参数等)的数据结构,以及用于检查,修改和创建它们的例程或类。修改功能使反射成为元编程的一种,因为它允许您编写生成其他代码的代码。

元编程的其他示例包括代码生成器,自我修改的二进制文件(尽管它们不像二十年前那样流行)。有人可能会说,currying和类似的功能编程技术也是一种元编程。


+1我真的很喜欢您的回答,我想问一下如何将编译器作为服务(如C#)或使用脚本引擎(如Java)来执行在运行时构造的代码。这不是元编程的一种形式吗?
M.Sameer 2011年

那么,有人用C语言构建Python解释器吗?将面向对象语言映射到SQL的ORM的实现如何?每个Web框架都是元编程的示例吗?
kojiro 2011年

1
  1. 不,不是。C ++程序被编译为机器代码,并且有关类等的所有信息都丢失了(除非在.NET环境中使用C ++ / CLI,但这不是纯C ++)。

2-3。我不知道-等待另一个答案可以帮助您:-)

使用C ++模板进行元编程非常强大,但也很复杂。模板扩展需要函数的编程风格,而不是C ++使用的命令式编程。如果您以前没有使用函数式编程的经验,我建议您绕道学习基本的Lisp,Haskell或方案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.