| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Специализация конструктора с параметром callback |
| Автор: null56 1.2.2010, 15:25 | ||||
| Всем привет Поясню что хочу сделать: хочу создать такой класс - шаблон, который бы принимал два параметра: - тип хранимого значения - функция callback, которую бы он вызывал у себя в деструкторе, другими словами автоматический закрыватель каких - либо хендлов Пытаюсь определить полную специализацию конструктора класса для типа int, но видимо не правильно определяю ее Класс
Вывод компилятора в отношении строки - проблемы
Вопрос: если моя цель ясна, то подскажите пожалуйста, можно ли специализировать конструктор класса (методы отдельно точно можно)? если это возможно, то подскажите где я накосячил с синтаксисом? Заранее благодарен всем откликнувшимся |
| Автор: 586 1.2.2010, 16:25 | ||
|
| Автор: tolgamrab 1.2.2010, 17:08 | ||||
| Рассматриваемая задача не нова. Это классически пример паттерна контейнер(ресурс) Вариант первый - решение задачи в лоб:
Использование:
Но лучше все же не баловаться callback процедурами и писать контейнер исходя из того, что он сам заботится об удалении ресурса, при необходимости специализировать шаблон для своего типа ресурса хитрым деструктором. А еще лучше - воспользоваться написанным. auto_ptr подходит как нельзя лучше для решения этой задачи. Нужно или написать обертку для хэндла - в конструкторе создаем, в деструкторе удаляем и все это дело на вход auto_ptr, или посмотреть на реализации умных указателей из любой приличной библиотеки. Там можно явно задавать и тип хранимого значения и стратегию удаления. |
| Автор: null56 1.2.2010, 17:13 | ||
| 586, спасибо, теперь понятнее... только не могу понять одну фразу из книги про шаблоны
что имел в виду автор в контексте второго предложения про отдельную функцию - член? Добавлено через 2 минуты и 30 секунд tolgamrab, да, про библиотеку согласен, просто разбираюсь с шаблонами... тебе тоже спасибо за пример |
| Автор: null56 1.2.2010, 21:12 |
| спасибо, так намного понятнее |