下面是一个我理解为静态多态的非常简单的示例。我不使用动态多态性的原因是,我不想阻碍PROCESSOR
中op
函数的内联。
template <class PROCESSOR>
void op(PROCESSOR* proc){
proc->doSomething(5);
proc->doSomethingElse();
}
int main() {
ProcessorY py;
op<ProcessorY>(&py);
return 0;
}
此示例的问题是:没有明确定义
PROCESSOR
必须定义的功能。如果缺少一个,则只会得到一个编译错误。我认为这是不好的风格。它还有一个非常实际的缺点:IDE的在线帮助当然不能向您显示该对象上可用的功能。
定义
PROCESSOR
的公共(public)接口(interface)的好/正式方法是什么? 最佳答案
首先,我认为您的静态多态示例没有问题。由于它是静态的,即编译时解析的,因此根据定义,它对接口(interface)定义的要求不太严格。
同样绝对合法的是,不正确的代码将不会编译/链接,尽管来自编译器的更清晰的错误消息会更好。
但是,如果坚持使用接口(interface)定义,则可以通过以下方式重写示例:
template <class Type>
class Processor
{
public:
void doSomething(int);
void doSomethingElse();
};
template <class Type>
void op(Processor<Type>* proc){
proc->doSomething(5);
proc->doSomethingElse();
}
// specialization
template <>
class Processor<Type_Y>
{
// implement the specialized methods
};
typedef Processor<Type_Y> ProcessorY;
int main() {
ProcessorY py;
op(&py);
return 0;
}
关于c++ - 静态多态性: How to define the interface?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29876983/