3 #include "executor.h"
\r
6 #define WIN32_LEAN_AND_MEAN
\r
10 #include <boost/noncopyable.hpp>
\r
12 #include <functional>
\r
16 template<typename T>
\r
17 class com_context : public executor
\r
19 std::unique_ptr<T> instance_;
\r
21 com_context(const std::wstring& name) : executor(name)
\r
23 executor::begin_invoke([]
\r
25 ::CoInitialize(nullptr);
\r
31 executor::invoke([&]
\r
33 instance_.reset(nullptr);
\r
38 void reset(const std::function<T*()>& factory = nullptr)
\r
40 executor::invoke([&]
\r
44 instance_.reset(factory());
\r
48 T& operator*() const { return *instance_.get();} // noexcept
\r
50 T* operator->() const { return instance_.get();} // noexcept
\r
52 T* get() const { return instance_.get();} // noexcept
\r
54 operator bool() const {return get() != nullptr;}
\r