#pragma once #include "TaskState.h" template class TaskResult { const TaskState _finalState; const T _result; TaskResult(TaskState finalState) : _finalState(finalState) { } TaskResult(const T& result) : _finalState(TaskState::Completed), _result(result) { } public: static TaskResult Failed() { return TaskResult(TaskState::Failed); } static TaskResult Canceled() { return TaskResult(TaskState::Canceled); } static TaskResult Completed(const T& result) { return TaskResult(result); } TaskState GetFinalState() const { return _finalState; } const T& GetResult() const { return _result; } }; template <> class TaskResult { const TaskState _finalState; TaskResult(TaskState finalState) : _finalState(finalState) { } public: static TaskResult Failed() { return TaskResult(TaskState::Failed); } static TaskResult Canceled() { return TaskResult(TaskState::Canceled); } static TaskResult Completed() { return TaskResult(TaskState::Completed); } TaskState GetFinalState() const { return _finalState; } };