Gio*_*hal 12 c++ inheritance templates base-class pure-virtual
在模板duck-typing和纯虚基类继承之间进行选择的指导原则是什么?例子:
// templates
class duck {
void sing() { std::cout << "quack\n"; }
};
template<typename bird>
void somefunc(const bird& b) {
b.sing();
}
// pure virtual base class
class bird {
virtual void sing() = 0;
};
class duck : public bird {
void sing() { std::cout << "quack\n"; }
}
void somefunc(const bird& b) {
b.sing();
}
Run Code Online (Sandbox Code Playgroud)
Sch*_*ron 11
使用模板duck-typing,您正在进行静态多态.因此,你无法做到这样的事情
std::vector<bird*> birds;
birds.push_back(new duck());
Run Code Online (Sandbox Code Playgroud)
但是,由于您依赖编译时键入,因此效率更高(没有虚拟调用意味着没有动态调度(基于动态类型)).