Здравствуйте, pastey, Вы писали:
P>Извините если сумбурно объяснил причины, надеюсь на помощь.
Если я верно понял, что тебе надо, то могу предложить такую схему.
1) В корневой класс ваших undo-объектов, добавляешь шаблон метода, который создаёт наследника.
2) В реальности эта штука должна создавать не заявленного наследника, а шаблонного наследника от него.
3) В корневом классе заводишь pure virtual метод, который сторонний код не может перекрыть (например там можно заюзать private типы).
То есть как-то так, примерно:
class CUndoObject {
struct SecretSeed {};
template<typename T> class Placeholder : public T { void checkSecretSeed( const SecretSeed& ) {} };
public:
template<typename T>
static T* CreateNew() { return new Placeholder<T>;
private:
virtual void checkSecretSeed( const SecretSeed& ) = 0;
};
Вторая стратегия -- проверка в rt.
1) перекрываем у CUndoObject operator new
2) внутри него регим все аллокируемые блоки
3) в конструкторе кастимся по dynamic_cast к void* и смотрим есть ли такой блок в базе.
Если есть -- то вычёркиваем. Если нет -- ругаемся...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском