LINUX.ORG.RU

C++ трюк с шаблоном


0

0

Имеется шаблонный класс-контейнер, тип элементов которого задаётся в шаблоне, при удалении объекта этого класса хотелось бы реализовать в деструкторе удаление элементов если это указатели. Т.е. проблема в том, что надо в зависимости от типа вызывать delete или нет. Кроме макросов ни чего в голову не лезет, но что-то подсказывает, что можно такое осуществить через шаблоны..

да хоть так:

class Foo
{
public:
	~Foo()
	{
		deleteIfPointer( p_ );
	}
private:
	template <typename T>
	void deleteIfPointer( T& ) 
	{}

	template <typename T>
	void deleteIfPointer( T* ) 
	{
		delete [] p_;
	}

	T p_;
};

aton
()

Я решил всё равно запостить свой вариант :)

#include <iostream>

using namespace std;

template<class T>
void cleanup(T *p)
{
        cout << "cleaning up pointer" << endl;
}

template<class T>
void cleanup(const T& p)
{
        cout << "non-pointer: no cleanup" << endl;
}

template<class T> class C {
        T data[4];
public:
        C() {}
        ~C() {
                for (int i = 0; i < 4; i++)
                        cleanup(data[i]);
        }
};

int main()
{
        C<float> cf;
        C<float *> cfp;

        return 0;
}

tailgunner ★★★★★
()
Ответ на: комментарий от dilmah

> Блеванул. Спасибо.

Тебе в соседнюю ветку - там изобретают очередное ООП для Схемы.

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.