Re: Две возможные стратегии...
От: Erop Россия  
Дата: 05.07.09 12:03
Оценка:
Здравствуйте, 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* и смотрим есть ли такой блок в базе.
Если есть -- то вычёркиваем. Если нет -- ругаемся...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.