下面是一个我理解为静态多态的非常简单的示例。我不使用动态多态性的原因是,我不想阻碍PROCESSORop函数的内联。

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/

10-11 19:08