关于c ++:为什么对同一模板参数的不同参数有这样的要求?

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

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

Note that there is no requirement that different arguments for the
same template parameter should be related by inheritance.

我能理解作者写了什么,但我不明白他为什么在文章中插入这个评论。我想我错过了一些东西,但我不知道到底是什么。


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

1
2
3
4
5
6
7
int i;
double d;
char c;

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

从不理解C++模板的人的角度来看,他/她会假设EDCOX1的原型0看起来是这样的。

1
2
3
print(SomeBaseType* pdata);
OR
print(void* pdata);

但是,使用模板所发生的情况是使用函数模板,例如

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

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

1
2
3
print(int* pdata);
print(double* pdata);
print(char* pdata);

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

谢谢你的阅读。

免责声明:打印函数可能不是最好的例子。


在介绍模板的概念时,他试图澄清模板并不是某种多道手术。

在模板被创建并添加到C++之前,只能使用继承(或多字节继承)编写泛型代码。

stroustrup先生当然希望读者不要混淆模板的另一个概念是接口。例如,在Java COMUNITY中,这是一种非常流行的技术,许多书都是OOP解释这个概念的。接口允许在定义类以实现(而不是继承)特定接口的条件下,对类使用某种通用代码。所有使用接口的类都必须与它相关。严格来说,这不是继承,但它是多重继承的一种替代品。

模板可以与任何对象或类一起使用,而不必事先将其类型与任何公共内容相关联。