如何向初级开发人员解释C ++模板?

时间:2009-11-19 10:41:27

标签: c++ templates

可以将问题分为两个:如何读取编写模板化代码。

很容易说,“你想要一个双打数组,写std::vector<double>”,但它不会教他们模板是如何工作的。

8 个答案:

答案 0 :(得分:8)

我可能会通过展示不使用模板的烦恼来尝试展示模板的强大功能。

一个很好的演示是写一些简单的东西,比如一堆双打(手写,而不是STL),方法是push,pop和foldTopTwo,它们弹出并将堆栈中的前两个值加在一起,以及重新推动新价值。

然后告诉他们为int(或者其他什么,只是一些不同的数字类型)做同样的事情。

然后向他们展示如何通过将此堆栈作为模板编写,您可以显着减少代码行数,以及所有可怕的重复。

答案 1 :(得分:4)

有句话说:“如果你无法解释,你就不明白了。”

您可以进一步细分:如何编写使用模板化代码的代码,以及如何编写为其他人提供模板化服务的代码。

基本解释是模板基于模板生成代码。这是“元编程”一词的来源。它编程应该如何完成编程。

向量的基本复杂性并不是它是双精度(或类型T)的向量,而是它是一个向量。基本结构是相同的,模板是分开的,与不相同的模板是一致的。

进一步的解释取决于对你有多大帮助!

答案 2 :(得分:2)

恕我直言,最好将它们解释为(非常)花哨的宏。它们的工作级别高于C风格的文本替换宏。

答案 3 :(得分:2)

我发现看鸭子语言很有启发性。无论如何,只要它们提供正确的界面,你提供的功能是什么类型的参数。

模板允许执行相同的操作:只要存在正确的界面,您就可以采用任何类型。鸭子类型的另一个好处是,在编译时检查接口。

答案 4 :(得分:2)

将它们显示为高级宏。它是一种编程语言,在编译过程中执行。

答案 5 :(得分:2)

我会让他们自己实现一些东西,然后尝试不同的变化,直到他们理解它为止。通过编程,边做边学几乎总是更好的选择。

例如,让他们制作一个比较两个值并返回较高值的模板。然后让他们看到已经通过整数或双打或任何仍然允许它工作的东西。然后让他们调整代码/复制它并让它返回最小值。再次尝试变化 - 模板是否允许它们传递int和double,或者它会抱怨吗?

从那里,你可以让它们传递任何类型的数组(int,double等),并让它从最高到最低排序数组,再次鼓励实验。从那里开始,进入模板化的类定义,使用相同类型的想法,但规模更大。这几乎是我学习模板的方法,最后是泛型类型的复杂数组操作类。

答案 6 :(得分:1)

当我自学C ++时,我经常使用this site。它explains templates深入而且非常好。我建议让他们阅读并试着实现一些简单的东西。

更简短的解释:模板是用于复杂构造的框架,这些构造对数据起作用,而不必知道该数据是什么。给他们一些简单模板的例子(比如链表),然后介绍如何使用模板生成最终的类。

答案 7 :(得分:-1)

你可以知道模板是一个半写的源代码,在设置模板时需要填充参数。