3 #include "executor.h"
\r
7 #include <boost/noncopyable.hpp>
\r
9 #include <functional>
\r
13 template<typename T>
\r
14 class com_context : public executor
\r
16 std::unique_ptr<T> instance_;
\r
18 com_context(const std::wstring& name)
\r
19 : executor(name, true)
\r
21 executor::begin_invoke([]
\r
23 ::CoInitialize(nullptr);
\r
30 executor::invoke([&]
\r
32 instance_.reset(nullptr);
\r
37 void reset(const std::function<T*()>& factory)
\r
39 executor::invoke([&]
\r
42 instance_.reset(factory());
\r
44 instance_.reset(nullptr);
\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