#pragma once #include "IGpMutex.h" #include template class GpMutex_Cpp11 final : public IGpMutex { public: ~GpMutex_Cpp11(); void Destroy() override; static GpMutex_Cpp11 *Create(); void Lock() override; void Unlock() override; private: GpMutex_Cpp11(); TMutex m_mutex; }; #include template GpMutex_Cpp11::GpMutex_Cpp11() { } template GpMutex_Cpp11::~GpMutex_Cpp11() { } template void GpMutex_Cpp11::Destroy() { this->~GpMutex_Cpp11(); free(this); } template GpMutex_Cpp11 *GpMutex_Cpp11::Create() { GpMutex_Cpp11 *mutex = static_cast*>(malloc(sizeof(GpMutex_Cpp11))); if (!mutex) return nullptr; return new (mutex) GpMutex_Cpp11(); } template void GpMutex_Cpp11::Lock() { m_mutex.lock(); } template void GpMutex_Cpp11::Unlock() { m_mutex.unlock(); } typedef GpMutex_Cpp11 GpMutex_Cpp11_NonRecursive; typedef GpMutex_Cpp11 GpMutex_Cpp11_Recursive;