什么样的C++模板编程可以称为“元编程”? [关闭]

Posted

技术标签:

【中文标题】什么样的C++模板编程可以称为“元编程”? [关闭]【英文标题】:What kind of C++ template programming can be called "meta programming"? [closed] 【发布时间】:2016-06-12 02:34:11 【问题描述】:
    使用什么样的模板技术,才能称为“元编程”? 对什么是元编程和什么不是元编程有一个很好的定义吗? 我们的 C++11 STL 是否包含大量元编程? “type_traits”是元编程吗?

非常感谢。

【问题讨论】:

从逻辑上讲,“元编程”是指“关于”其他程序或“生成其他代码的代码”的程序。根据这个定义,C 预处理器也可以是“元编程”。我认为类型特征是元编程。但是,这是一个英语问题,不是编程问题 :) 我投票结束这个问题,因为这不是关于编程的问题 @ChrisBeck 当然,这是一个关于元编程而不是编程的问题。 :p 编程术语与编程无关吗?术语“元”是自指的。我想这意味着“编程程序”之类的东西。它指的是模板不是直接(传统)程序代码,而是将它们实例化成为程序代码的方式。 实例化的过程规则本身被认为是一种基本的(函数式)编程语言。所以,我想,当我们使用一种编程语言来创建程序语言时,它被称为“元编程”。 @Galik:我认为元编程实际上不是一个技术术语,这就是我投票关闭的原因 【参考方案1】:

Q1.使用什么样的模板技术,可以称为“元编程”?

模板元编程是指使用模板和编译器来执行编程的一些关键元素:循环、if-else 分支、C/C++ 切换(如分支、递归等)。

第一个这样的元程序用于生成前几个素数作为编译器错误消息。见http://www.erwin-unruh.de/primorig.html

Q2. 是否对什么是元编程和什么不是元编程有很好的定义?

可以在Wikipedia找到一个很好的定义。

模板元编程 (TMP) 是一种元编程技术,其中编译器使用模板生成临时源代码,编译器将其与源代码的其余部分合并,然后进行编译。这些模板的输出包括编译时常量、数据结构和完整的函数。模板的使用可以被认为是编译时执行。该技术被多种语言使用,最著名的是 C++,还有 Curl、D 和 XL。

Q3.我们的 C++11 STL 是否包含大量元编程?

很有可能,但这只是猜测。我还没有深入研究标准库的任何实现。

Q4.是“type_traits”元编程吗?

再一次,我没有深入研究它,但我想“type_traits”的大部分功能都是使用元编程技术实现的。

【讨论】:

【参考方案2】:

“元编程”在非正式演讲中用于指代各种编程技术:

关于类型的信息,即“类型特征”。这是最直接的元类型,因为“元”在这里的意思是“关于某事”

(Ab) 使用 C 预处理器或模板。您实际上并不是在“用” C++ 编程,而是在使用一种子语言。 IOCCC 有很多人使用 C 预处理器执行各种完整程序的示例,例如河内塔和计算素数。模板元程序的“经典”示例是计算斐波那契。换句话说,您将“超出”C++ 的正常范围来创建程序,这使得这种用法类似于元游戏

Quines,创建程序,创建程序,自托管编译器等。这里的“元”表示“自引用”,如分形

标准库是否包含“元编程”是实现定义的。一些实现会因此而疯狂,而另一些则不会。

实际上也没有一个好的定义,“元”这个词具有讽刺意味的是有点模糊。

【讨论】:

以上是关于什么样的C++模板编程可以称为“元编程”? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C++ 和 D 中的元编程

初识C++模板元编程(Template Mega Programming)

C++模板元编程深度解析:探索编译时计算的神奇之旅

C++ 高阶操作:模板元编程

万字长文 | 最好的 C++ 模板元编程干货!

C++元编程的学习笔记