为什么使用继承和多态而不是函数模板实例来调用相同签名的成员函数?

问题描述 投票:2回答:1

我正在努力学习面向对象编程的核心特性,这可能是一个奇怪的问题,但我想问。

为什么要用继承和多态来代替函数模板实例 来调用相同签名的成员函数?

c++ templates inheritance polymorphism
1个回答
1
投票

模板是一种在编译时工作的功能(静态),所有涉及到的对象的类型都可以通过阅读代码,看到每一种对象是什么来计算出来。

而继承和多态则是为我们在编译时无法知道对象的类型而设计的。

举个例子,看看这段代码。

Base* ptr = randomCoinTossIsHeads()? new Derived1() : new Derived2();
ptr->virtualFunction();

这里,我们无法静态地知道(在编译时) ptr指向的是什么类型的对象。它有 50% 的机会是 Derived1,50% 的机会是 Derived2。这意味着我们不能在这里使用模板来决定调用哪个函数。模板假设我们在生成代码时就知道我们要处理的是什么类型的东西,而这里的情况并非如此。

希望能帮到大家!

© www.soinside.com 2019 - 2024. All rights reserved.