Обёртки над ресурсами
От: Аноним  
Дата: 04.01.09 19:43
Оценка:
Имеются некоторые ресурсы и функции для их создания/освобождения. Функции однотипные, для простоты можно считать, что они принимают одинаковое количество параметров, но разных типов (в зависимости от ресурса) и с разными именами.

Что хочется: написать обобщённую обёртку над ними, что-то вроде auto_ptr, но для начала достаточно, чтобы обёртка просто освобождала ресурс в своём деструкторе.
Что не хочется: писать практически дублирующиеся стратегии освобождения для каждой новой функции (*), если брать за основу unique_ptr, например.
Что имеется: компилятор С++ (с поддержкой лямбда-выражений).

Пример:
/* нижеследующий код практически идентичен для всех типов ресурсов: resource1_t, resource2_t, ... resourceN_t */
typedef struct { ... } resource1_t;

resource1_t* create_resource1(...);
void destroy_resource1(resource1_t*);
/***/

void foo()
{
 resource_ptr res1(create_resource1(...));
 // работа с ресурсом
 ...
} // автоматический вызов destroy_resource1(res1.get())


* Почему не хочется писать стратегии? Потому что типов ресурсов много и они могут добавляться, поэтому хотелось бы максимально обобщить и упростить обёртку над ними.
Что можно с этим сделать? Написать единую функцию освобождения, перегруженную для разных ресурсов и вызывать её из обёртки? Или можно придумать что-то на шаблонах?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.