Ниже представлен очень простой пример того, что я понимаю как статический полиморфизм. Причина, по которой я не использую динамический полиморфизм, заключается в том, что я не хочу препятствовать встраиванию функций 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
?
Прежде всего, почему вы принимаете указатели? Во-вторых, определение дается вами в документации этого шаблона функции. – Columbo
Кроме того, IDE, не показывающие список участников, не являются очень значительным недостатком. – Columbo
Вам просто нужно подождать [Концепции TS] (http://en.cppreference.com/w/cpp/language/constraints). – hynner