Применение шаблонов языка C++.
Применение шаблонов языка C++.
Альтернативой приведенной выше реализации может служить реализация класса Singleton при помощи шаблонов языка С++. Преимущество такого подхода заключается в автоматической параметризации метода Instance(), что приводит к отсутствию необходимости переопределять его в классах потомках. По изложенным ранее причинам конструктор класса-потомка также должен быть объявлен защищенным, а деструктор виртуальным. Кроме того, базовый класс Singleton должен быть объявлен другом класса наследника, поскольку метод Instance() базового класса в этой модели создает объект производного класса.
листинг 9
template <class T>
class Singleton {
static T* _self;
static int _refcount;
protected:
Singleton(){}
virtual ~Singleton(){_self=NULL;}
public:
static T* Instance();
void FreeInst();
};
template <class T>
T* Singleton<T>::_self = NULL;
template <class T>
int Singleton<T>::_refcount=0;
template <class T>
T* Singleton<T>::Instance() {
if(!_self) _self=new T;
_refcount++;
return _self;
}
template <class T>
void Singleton<T>::FreeInst() {
if(--_refcount==0) delete this;
}
class Derived: public Singleton<Derived> {
protected:
Derived(){}
friend class Singleton<Derived>;
};
int main(int argc, char* argv[]) {
Derived *p = Derived::Instance();
…
…
…
p->FreeInst();
return 0;
}
Классы, объекты которых должны существовать в единственном экземпляре, просто наследуются от шаблонного класса Singleton. Такой подход, однако, не позволяет создать иерархию классов во главе с классом-интерфейсом, в которой некоторые из классов-наследников реализуют паттерн проектирования Singleton, а некоторые нет (См листинг 8). С другой стороны, применение параметризованного класса позволяет вынести код Singleton’а в отдельный файл и включать его в последствии в создаваемые приложения, обеспечивая тем самым повторное использование паттерна Singleton.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Тела шаблонов
Тела шаблонов Шаблоны формируются по жестко заданным правилам. Они способны содержать элементы <xsl:param>, за которыми следует тело шаблона; в последнем могут содержаться данные PCDATA, инструкции XSLT, элементы расширения и элементы буквального
Глава 3 Создание и применение шаблонов
Глава 3 Создание и применение шаблонов Эта глава полностью посвящена созданию шаблонов и работе с ними как с основой таблиц стилей XSLT. Каждый шаблон образует правило, которое процессор XSLT пытается применить к исходному документу.В главе 2 мы кратко рассмотрели таблицы
Элемент <xsl:call-template>: применение именованных шаблонов
Элемент <xsl:call-template>: применение именованных шаблонов У элемента <xsl:template> есть атрибут name, задающий имя шаблона. Предположим, у меня есть элемент буквального результата, состоящий из двух элементов <BR> и двух элементов <HR> HTML, при помощи которого я создаю в
Рекурсивный вызов шаблонов
Рекурсивный вызов шаблонов Эта тема предназначена, главным образом, для программистов, поскольку здесь я буду пользоваться XSLT как языком программирования. В частности, я реализую вызов именованным шаблоном самого себя, то есть рекурсивный вызов. Классический пример
Создание шаблонов
Создание шаблонов При работе с корреспонденцией может возникнуть ситуация, когда в своих сообщениях вам придется неоднократно набирать повторяющийся текстовый фрагмент (простейший пример – приветствие и подпись). Согласитесь, в этом случае имеет смысл зафиксировать
Удаление шаблонов узлов STP
Удаление шаблонов узлов STP Если нужно удалить файлы STP из галереи шаблонов узлов, выполните следующее.Откройте узел SharePoint верхнего уровня, на который были загружены файлы STP. Если потребуется, введите имя пользователя и пароль и щелкнитеУбедитесь, что имеете достаточно
2.11. Использование шаблонов Word
2.11. Использование шаблонов Word Еще один инструмент упрощения ввода текста – шаблон – документ, который создают один раз, чтобы потом использовать его для создания других документов. Шаблоны представляют собой электронные бланки, в которых можно задать все необходимые
Использование шаблонов титров
Использование шаблонов титров Титры могут использоваться не только для показа на экране названия фильма и списка актеров. В немом кино с помощью титров выводились диалоги, в современных фильмах – место или время события в кадре, в информационных передачах – номера
Создание библиотек шаблонов
Создание библиотек шаблонов Приложение для создания библиотек шаблонов (по своей сути также прикладная библиотека к КОМПАС-3D, названная Менеджером шаблонов) позволяет создавать особый вид пользовательских прикладных библиотек. Эти библиотеки состоят из базового
Создание шаблонов
Создание шаблонов Если вам приходится много переписываться, очень скоро вы обнаружите, что вам надоело каждый раз писать «Доброе время суток!» в начале письма и «С искренними надеждами на плодотворное сотрудничество, Вассисуалий Апполинарович Иммануилов-Полесский» в
Создание шаблонов страниц
Создание шаблонов страниц Прежде всего, нам потребуется выбрать (указать) формат страницы, создать новый документ и хотя бы предварительно оформить мастер-страницы.Предположим, что наша книга будет формата 60 ? 90/16. Как мы знаем из первой части книги, без консультации в
10.5. Модели компиляции шаблонов А
10.5. Модели компиляции шаблонов А Шаблон функции задает алгоритм для построения определений множества экземпляров функций. Сам шаблон не определяет никакой функции. Например, когда компилятор видит шаблон:template typename TypeType min( Type t1, Type t2 ){return t1 t2 ? t1 : t2;}он сохраняет
16.9. Специализации шаблонов классов A
16.9. Специализации шаблонов классов A Прежде чем приступать к рассмотрению специализаций шаблонов классов и причин, по которым в них может возникнуть надобность, добавим в шаблон Queue функции-члены min() и max(). Они будут обходить все элементы очереди и искать среди них