на несоклько тем выше (менеджер задач) я описывал гипотетическую задачу по многозадачности (
http://rsdn.ru/forum/design/4233224.1.aspxАвтор:
Дата: 14.04.11
)
в ней используется шаблон Команда с несколькими надстройками:
1. синхронно/асинхронно (в отдельном потоке или в текущем).
2. поддержка отката.
3. прогресс выполнения.
Хотелось бы отдельно обсудить реализацию.
1. хотелось бы узнать, кто как реализует команды (интерфейс отката назад).
в примере из ГоФ используется флаг IsUndoable(), и метод Undo(), еще есть вариант при выполнении команды возвращать команду, которая делает откат (или возвращать 0), так же можно использовать стратегии. Или можно содать несколько интерфейсов и кастить их
// пример 1. происходит захламление, т.к. появляется 2 лишних метода там, где опция не поддерживается
class ICommand
{
public:
virtual void Execute() = 0;
virtual void IsUndoable() const = 0;
virtual void UnExecute() = 0;
};
// пример 2. Неплохой вариант в виду того, что все равно обратная функция понадобится в работе.
class ICommand
{
public:
virtual ICommand *Execute() = 0;
};
// пример 3.
Пока не придумал ничего. думаю, что это будет пример 1, в котором результаты методов зависят от стратегии
пример 4. В таком случае нужно постоянно кастить объект, что равноценно примеру 1, только с "чистым" списком методов класса
class ICommand
{
public:
virtual void Execute() = 0;
};
class IUndoable
{
public:
virtual void Undo() = 0;
};
class MyCommand: public ICommand, public IUndoable
{
...
};
Какие варианты используете вы?
Здравствуйте, Аноним, Вы писали:
А>а можно подробнее про TPL, RX. что это такое?
А это всё для дотнета. Код проглядел мельком и почему-то решил, что тема ближе к яваистам/дотнетчикам
А>Какой взять готовый фреймворк для с++?
По-моему, лучше спросить в профильном разделе.