为什么对同一模板参数的不同参数有这样的要求?

时间:2014-12-13 10:49:33

标签: c++ templates c++11

在他的新书第671页,Stroustrup先生写下了以下一句话:

  

请注意,没有要求不同的参数   相同的模板参数应该通过继承相关。

我能理解作者所写的内容,但我无法理解他在文中插入此评论的原因。我想我在这里遗漏了一些东西,但我不确切知道是什么。

2 个答案:

答案 0 :(得分:1)

在介绍模板的概念时,他试图弄清楚它不是某种多形态

在模板发明并添加到C ++之前,您只能使用继承(或多重继承)编写通用代码。

Mr.Stroustrup当然希望读者不要与模板混淆的另一个概念是接口。例如,在java社区中,这是一种非常流行的技术,很多OOP的书都解释了这个概念。接口允许您使用某种类的通用代码,条件是定义类来实现(不继承)特定接口。使用该接口的所有类都必须与它相关。它不是严格意义上的继承,但它是kind of substitute to multiple inheritance

模板可以与任何对象或类一起使用,而不会将其类型与任何共同点相关联。

答案 1 :(得分:1)

如果我们从对模板概念完全陌生的人的角度来看模板的用例,答案很简单。

int i;
double d;
char c;

print(&i); //prints an integer
print(&d); //prints a double
print(&c); //prints a char

从不了解C ++模板的人的角度来看,他/她会认为print的原型看起来像这样。

print(SomeBaseType* pdata);
OR
print(void* pdata);

然而,模板的作用是使用功能模板,例如

template <typename T>
print(T* pdata);

对于上述用例,编译器在编译时生成三个函数

print(int* pdata);
print(double* pdata);
print(char* pdata);

并通过函数重载决策,调用正确的函数。

感谢您的阅读。

免责声明:打印功能可能不是最佳示例。