Я хочу знать, хорошо ли создавать абстрактный класс с несколькими чисто виртуальными методами в c ++?
Например, в некоторых ситуациях, таких как реализация диалогов протокола инициации сеанса, мы обнаружили, что он может быть реализован с использованием шаблона моста. Но наличие абстрактного базового класса для общих операций приводит к очень большому абстрактному классу. Теперь, с точки зрения производительности, каков эффект от использования и реализации такого класса?
Представьте, что у нас есть разные диалоги, каждый из которых имеет свою реализацию.
(например: InviteDialog, RegisterDialog, InfoDialog, …)
Применение схемы моста:
class IIDialog{
public:
/*there are multiple pure virtual methodes at least 15*/
virtual int32_t SendResponse(ISipMessage* response) = 0;
protected:
/*there are multiple methods that use pure virtual methods*/
int32_t Send_Response(){retun SendResponse(response);}
}
class IInviteDialog : public IIDialog
{
/*Implemet virtual methods*/
}
class IRegisterationDialog : public IIDialog
{
/*implement virtual methode*/
}
другие части реализации игнорируются (реальные реализации и рефераты для реализации, которые используются вышеперечисленными классами)
Спасибо
С большинством современных компиляторов C ++ можно предположить, что накладные расходы производительности при создании объекта не зависят от количества виртуальных методов.
И при фактическом вызове методов я ожидаю, что издержки не будут больше, чем у любого альтернативного метода реализации.
И если эти вызовы функций делают «сложные» вещи, такие как сетевые операции, тогда вам не нужно беспокоиться о таких микрооптимизациях, это будет совершенно неактуально.
С точки зрения производительности, количество виртуальных методов не имеет значения в C ++ (существует небольшая постоянная цена за косвенное обращение, независимо от количества методов).