Цель общедоступного метода, который вызывает только частную чисто виртуальную функциюC++

Программы на C++. Форум разработчиков
Anonymous
Цель общедоступного метода, который вызывает только частную чисто виртуальную функцию

Сообщение Anonymous »

Читая о возможностях библиотеки C++17, я обнаружил общедоступные методы, которые просто вызывают частные чисто виртуальные методы. Например:

std::pmr::memory_resource::allocate

Код: Выделить всё

void* allocate( std::size_t bytes, std::size_t alignment = alignof(std::max_align_t) );
Выделяет хранилище размером не менее байтов, выровненное по указанному выравниванию.
Эквивалентно возврату do_allocate(байты, выравнивание);


std::pmr:: Memory_resource::do_allocate

Код: Выделить всё

virtual void* do_allocate( std::size_t bytes, std::size_t alignment ) = 0;
и

std::basic_streambuf< CharT,Traits>::pubsync, std::basic_streambuf::sync

(1) int pubsync() ;
защищено:
(2) виртуальная синхронизация int();
  • Вызывает sync() самого производного класса
почему используется такой шаблон?
Я читал В чем смысл частной чистой виртуальной функции? и несколько статей об идиоме NVI, но ничто не объясняет приведенные выше случаи, когда метод ничего не делает, а вызывает частный метод и не имеет перегруженных методов.

Подробнее здесь: https://stackoverflow.com/questions/787 ... l-function

Вернуться в «C++»