为什么对同一模板参数的不同参数会有这样的要求
Why would there be such a requirement for different arguments of the same template parameter?
在他的新书第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);
通过函数重载解析,可以调用正确的函数。
感谢您的阅读。
免责声明:打印功能可能不是最好的示例。
相关文章:
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 在C++中传递给函数时,为什么要指定数组大小作为参数
- 为什么 std::function 可以作为 std::not2 的参数?
- 当给定默认值时,为什么此模板参数推导失败
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 为什么默认复制函数在按值发送参数时不调用?
- 为什么 std::绑定错误参数可以成功?
- 模板参数列表中的 false 在模板初始化期间计算为什么?
- 为什么我们不能重复使用具有不同模板参数的别名模板标识符?
- 为什么模板参数推导失败?
- 为什么我需要在成员发起器列表中重复基类的模板参数?
- 为什么我不能将引用作为 std::async 的函数参数传递
- 为什么可变参数函数不适用于模板
- 为什么即使我调用参数化构造函数也会调用默认构造函数?
- 为什么这个噪声函数不处理否定参数?
- 不可能:此指针作为默认参数.为什么
- 默认模板参数:为什么编译器抱怨没有指定模板参数
- C++数组作为参数 - 为什么只需要指定"outer"维度
- 函数重载std::函数参数:为什么从未调用const方法
- 使用 std::enable_if 作为 templ 时的默认模板参数.参数:为什么可以使用两个仅在enable_if参