Описание тега non-virtual-interface

Шаблон невиртуального интерфейса - это использование абстрактного базового класса с общедоступными невиртуальными функциями, которые делегируют (чистым) виртуальным функциям, которые могут быть переопределены производными классами.
3 ответа

Нет типа с именем 'тип' в производном классе CTRP

Я экспериментировал с шаблоном Curiously Recurring Template для общего функтора с одним аргументом и имею две реализации: одна с использованием параметра шаблона шаблона, который работает, и вторая, где я пытаюсь получить доступ к производному Funct…
21 авг '17 в 16:18
2 ответа

C++: Разница между шаблонами NVI и шаблонами?

В чем разница между шаблонами NVI ( не виртуальный интерфейс) и шаблонным методом? Они кажутся очень похожими, и я прочитал, что они в основном одинаковы, и что они слегка отличаются, так как Template является более общим.
2 ответа

В соответствии с идиомой NVI, почему виртуальная функция не может быть общедоступной?

C++ частный и защищенный виртуальный метод и есть ли веская причина не использовать общедоступные виртуальные методы? речь идет о не виртуальном интерфейсе (NVI) и непубличной виртуальной функции и их симбиозе. Скотт Мейерс также говорит в Effectiv…
15 сен '15 в 17:41
2 ответа

Добавление инвариантов в идиоме не виртуального интерфейса

Предположим, у меня есть следующая иерархия, использующая идиому NVI: class Base { public: virtual ~Base() {} void foo() { cout << "Base::foo" << endl; foo_impl(); } private: virtual void foo_impl() = 0; }; class A : public Base { privat…
0 ответов

Виртуальный шаблонный обходной путь для многоуровневого NVI

Я пытаюсь создать класс, который будет действовать как базовый класс для любого типа, который я хочу сериализовать в частном проекте, который я делаю. Я пытаюсь заставить класс работать, по крайней мере, с усилением архивов сериализации и QDataStrea…
29 ноя '15 в 18:18
1 ответ

Частное наследование и не виртуальные интерфейсы

Так что некоторое время я интересовался D, и некоторое время назад возился с ним. Я начал смотреть на это снова, и мне действительно нравится то, чего он пытается достичь, но у меня есть сомнения по поводу одного из моих любимых вариантов дизайна C+…
03 июл '13 в 09:32
2 ответа

Не виртуальные методы, статическое связывание и интерфейс в C#

Я понимаю, что не виртуальные методы статически связаны, что означает, насколько я понимаю, что во время компиляции известно, какой метод будет вызываться для какого объекта. Это решение принимается на основе статического типа объекта (ов). Меня сму…
4 ответа

Как реализовать интерфейсный класс, используя не-виртуальную идиому интерфейса в C++?

В C++ интерфейс может быть реализован классом со всеми его методами чисто виртуальными. Такой класс может быть частью библиотеки, чтобы описать, какие методы должен реализовать объект, чтобы иметь возможность работать с другими классами в библиотеке…
29 апр '10 в 07:49
4 ответа

Частные переопределения шаблона частных методов? (ОТВЕТ: NVI)

Какой принятый жаргон (если таковой имеется) для описания методов, которые должны вызываться только виртуально и из других методов в базе? Я иногда видел, что это называется обратным вызовом, но это, кажется, отклоняется от первоначального определен…
4 ответа

Не виртуальная деривация: что я действительно получаю от компилятора?

Мне интересно, что создается компилятором при использовании не виртуальной деривации: template< unsigned int D > class Point { int[D]; // No virtual function // ... }; class Point2 : public Point<2> {}; class Point3 : public Point<3&g…
4 ответа

Является ли идиома Non-Virtual Interface (NVI) такой же полезной в C#, как в C++?

В C++ я часто нуждался в NVI, чтобы получить согласованность в своих API. Однако я не вижу, чтобы он так часто использовался в C#. Интересно, потому что C#, как язык, предлагает функции, которые делают NVI ненужным? (Я все еще использую NVI в C#, хо…
5 ответов

Какой смысл частной чисто виртуальной функции?

Я наткнулся на следующий код в заголовочном файле: class Engine { public: void SetState( int var, bool val ); { SetStateBool( int var, bool val ); } void SetState( int var, int val ); { SetStateInt( int var, int val ); } private: virtual void SetSta…
19 окт '10 в 16:00
2 ответа

Не виртуальный интерфейс идиома для более чем двух уровней наследования?

Идиома невиртуального интерфейса описывает, как виртуальные методы являются непубличными точками настройки, а общедоступные методы не виртуальны, чтобы позволить базовому классу всегда контролировать, как называются точки настройки. Это элегантная и…
5 ответов

Финальные методы Java vs C++ не виртуальные функции

Финальные java-методы и невиртуальные методы C++ разные или одинаковые? Как?
18 апр '11 в 04:46
4 ответа

C# вызов метода интерфейса не виртуальной реализации

Я новичок в C#, и я не понимаю, почему компилятор не жалуется на этот код. Вот иерархия классов: interface IAble { void f(); } class AAble : IAble { public void f() { Debug.Log("---->> A - Able"); } } class BAble : AAble { public void f() { De…
06 сен '18 в 11:51
1 ответ

Используя идиому не-виртуального интерфейса, можно / будет ли встроена моя не-виртуальная функция?

Недавно я решил использовать не-виртуальный интерфейс (NVI) для разработки интерфейса на C++, в основном с целью использования параметра со значением по умолчанию (таким образом избегая проблем, вызванных тем, что параметры по умолчанию статически с…
3 ответа

Метод клонирования с не виртуальным интерфейсом и некоторыми закрытыми переменными

У меня есть абстрактный класс сказать Figure и некоторые производные классы: Circle, Square... Фигура класса реализует: private: virtual double varea()=0; double multiplier; public: virtual Figure * clone()=0; double area() { return varea()*multipli…
18 дек '13 в 09:21
2 ответа

Жизненный цикл активности Android: почему сначала не вызывается супер-метод?

Одно из требований базовой разработки под Android (согласно документации Google) заключается в том, что при переопределении методов жизненного цикла действия (onCreate, onResume, onPause и т. Д.) Сначала необходимо вызвать метод родителя: @Override …
0 ответов

Можно ли написать шаблон класса C++, который автоматически оборачивает и виртуализирует не виртуальные интерфейсы?

Эта проблема При написании юнит-тестов часто нужны фиктивные объекты. Чтобы сделать заменяемый объект proccution, класс фиктивного объекта происходит от класса производственного объекта и переопределяет некоторые виртуальные функции. Проблема возни…
2 ответа

Не виртуальный шаблон проектирования интерфейса в C#/C++

При разработке интерфейса кто-то рекомендовал использовать не виртуальный шаблон интерфейса. Может кто-нибудь вкратце рассказать о преимуществах этого паттерна?
25 июн '11 в 23:57