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

Why would there be such a requirement for different arguments of the same template parameter?

本文关键字:参数 为什么      更新时间:2023-10-16

在他的新书第671页,斯特劳斯特鲁普先生写了以下句子:

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

我可以理解作者写的内容,但我无法理解他在文本中插入此评论的原因。我想我在这里错过了一些东西,但我不知道到底是什么。

在介绍模板的概念时,他试图明确它不是某种多形主义

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

Stroustrup先生当然希望读者不要与模板混淆的另一个概念是界面。例如,在Java社区中,这是一种非常流行的技术,许多书籍abot OOP都解释了这个概念。接口允许您在类中使用某种泛型代码,条件是该类被定义为实现(而不是继承)特定接口。 使用该接口的所有类都必须与之相关。 严格来说,这不是继承,但它是多重继承的一种替代品。

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

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

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);

通过函数重载解析,可以调用正确的函数。

感谢您的阅读。

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