3

以我的经验,元模板真的很有趣(当你的编译器兼容时),并且可以提供良好的性能提升,幸运的是,我周围都是经验丰富的 C++ 程序员,他们也熟悉元模板,但偶尔会有新的开发人员到来并且可以'不要对我们使用的一些元模板技巧(主要是 Andrei Alenxandrescu 的东西)做出正面或反面,持续几周,直到他得到适当的启动。

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

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

4

8 回答 8

7

如果你能找到足够多真正了解模板元编程的候选人,那么无论如何,都需要它。您将向许多合格且具有潜在生产力的人展示大门(有很多正当理由不知道如何做到这一点,即如果您在很多平台上这样做,您将创建无法编译的代码,否则普通开发人员将难以理解)。模板元编程很棒,但让我们面对现实吧,它把 C++ 推向了极限。现在,应聘者可能应该了解基础知识(在编译时计算 n!,或者至少在向他们展示代码时解释它是如何工作的)。如果您的新开发人员在几周内可靠地变得高效,那么您当前的招聘可能相当不错。

于 2008-10-14T05:00:04.163 回答
4

是的,但我个人不会高度重视它。这是一个很好的特性,但它有点情景化,没有它也可以开发出好的 C++ 代码。我个人使用过一次或两次,但并没有真正发现它在我的工作中足够有价值以经常使用它。(也许这是我缺乏 C++ 生产经验的原因)

于 2008-10-14T05:00:33.057 回答
3

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

于 2008-10-14T06:16:18.893 回答
2

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

但是,如果你有一个不错的 C++ 编译器,比如 gcc 3.3ish+,那么是的,你应该看看模板元编程。一个好的开始当然是 boost 库,因为它涵盖了当 STL 耗尽气体时您似乎要四处寻找的大部分模板。它也是一个很好的起点。

然而,有时我发现模板元编程的优势(大量带有几行 < 和 > 的类型安全的代码)并不值得为此付出代价。有时,一个好的 for(container::const_iterator iter = ...) 可以很好地满足您的需求。

于 2008-10-14T06:25:26.707 回答
2

18 个月后,这个话题仍然非常重要。我仍然会说模板元编程不是必需的知识,但是您至少需要能够阅读和解释诸如条件和奇怪重复的模板模式(循环)之类的基础知识。除此之外,只要你有几个人可以编写一个好的接口,那么真正需要的只是基本到中级的模板知识,尽管 YMMV。

于 2010-04-13T18:18:21.670 回答
1

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

话虽如此,如果你想深入了解我的低级库,你将不得不知道很多。但是,您甚至不必知道模板(除了基线知识)即可使用它们。这就是我至少划清界限的方式,以及我期望其他开发人员的知识水平(取决于他们如何使用代码)。

于 2008-10-14T07:48:04.637 回答
1

我不认为需要模板编程,但知道这绝对是件好事。您应该对该主题有足够的了解,以便能够有效地使用 STL 或 Boost 等模板库。

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

于 2008-10-14T10:25:13.790 回答
-1

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

由于您推出了自己的模板,任何新人都必须跟上它们的速度,就像您的其他代码一样,这将是学习的更大部分。

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

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

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

于 2008-10-14T05:31:19.827 回答