C ++元模板是否需要程序员的知识?

时间:2008-10-14 04:43:24

标签: c++ metaprogramming

根据我的经验,元模板真的很有趣(当你的编译器兼容时),并且可以提供良好的性能提升,幸运的是我被经验丰富的C ++程序员所包围,这些程序员也会使用元模板,但偶尔会有新的开发人员到达并且不能使我们使用的一些元模板技巧(主要是Andrei Alenxandrescu的东西)的头或尾,持续几周直到他适当地启动。

所以我想知道其他C ++程序员的情况是什么? 元模板编程应该是C ++程序员应该“必须”知道的(当然不包括入门级学生)吗?

编辑:注意我的问题与生产代码有关,而不是很少的样本或原型

8 个答案:

答案 0 :(得分:7)

如果你能找到足够的候选人,他们真的知道模板元编程,那么一定要求它。您将展示许多合格且具有潜在生产力的人员(有很多正当理由不知道如何执行此操作,即如果您在许多平台上执行此操作,您将创建无法编译的代码,或者普通开发人员将难以理解)。模板元编程很棒,但让我们面对它,它正在推动C ++达到极限。    现在,候选人应该理解基础知识(在编译时计算n!或至少解释如果它们显示代码它是如何工作的)。如果您的新开发人员在几周内可靠地提高工作效率,那么您当前的招聘可能会非常好。

答案 1 :(得分:4)

是的,但我个人不会高度重视它。这是一个很好的功能,但它有点情境化,没有它就可以开发出好的C ++代码。我个人曾经使用过一两次,但是在我的工作中经常使用它并没有真正发现它有价值。 (可能这是我缺乏C ++制作经验的一个功能)

答案 2 :(得分:3)

我在生产代码中使用模板元编程的唯一用途是展开一个关键循环,该循环读取硬件寄存器N次,然后是另外M次,N,M对于不同的硬件不同并且在编译时已知。一般来说,这些技术似乎不适合我们的代码库,我从来没有通过代码审查。

答案 3 :(得分:2)

必需?一如既往,这取决于。对于我们这些刚刚为我们的微型小型DSP获得半正式C ++编译器的嵌入式领域的人而言,我们很高兴能够使用类。

但是,如果你有一个不错的C ++编译器,比如说gcc 3.3ish +,那么是的,你应该看一下模板元编程。当然,一个良好的开端是升级库,因为它涵盖了当STL耗尽汽油时你似乎环顾四周的大多数模板。它也是一个很好的起点。

然而,有时我发现模板元编程的优点(很多类型安全的代码和几行<和>)不值得花费它。有时,(container :: const_iterator iter = ...)的旧版本可以满足您的需求。

答案 4 :(得分:2)

18个月后,这个话题仍然非常相关。我仍然会说模板元编程不是必需的知识,但你需要能够至少阅读和解释基本知识,如条件和奇怪的重复模板模式(循环)。除此之外,只要你有一些人可以为它编写一个好的界面,那么只需要基本的中间模板知识就可以了,尽管是YMMV。

答案 5 :(得分:1)

作为一个合理(虽然不是很广泛)使用模板和元编程的人,我会尽可能地尝试使接口(以及我的意思是内部使用接口)尽可能正常。不是每个人都能理解模板,甚至那些有时无法理解复杂或迟钝的元编程范式的模板。

话虽如此,如果你想深入修改我的低级库,你将不得不知道很多。但是,您甚至不必知道模板(除了基线知识)才能使用它们。这就是我至少绘制线条的方式,以及我在其他开发人员中所期望的知识水平(取决于他们如何使用代码)。

答案 6 :(得分:1)

我不会考虑需要模板编程,但绝对值得一提。您应该对该主题有足够的了解,以便能够有效地使用模板库,例如STL或Boost。

当我采访某人时,我总是会问一些关于模板元编程的问题。如果候选人不知道这个问题,我绝不会反对他们。但是,如果他们这样做,那么对他们有利,这是一个很大的优势。

答案 7 :(得分:-1)

知道如何使用C ++模板并非绝对必要。没有它们你可以做大多数事情。然而,它们是一个很棒的功能。

由于你推出了自己的模板,所以任何新人都必须加快速度,就像其他代码一样,这将是学习的重点。

我鼓励人们学会使用 STL 的一些功能。我在生产代码中使用了这个库,它确实节省了时间并简化了一些事情。当需要时我也会自己动手。

我也听说过 boost 库的好消息。

如果我需要编写可移植代码,那么我通常会远离模板,因为许多编译器仍然不能正确支持它们。如果您需要便携式STL,那么 STLPort 是最便携的。