Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <memory>
- struct COMDeleter {
- template<typename T> void operator()(T* ptr) {
- ptr->Release();
- }
- };
- template<typename T, typename Del> struct PointerToPointerToUniquePointer {
- PointerToPointerToUniquePointer(std::unique_ptr<T, Del>* unique) {
- ptr = unique;
- t_ptr = nullptr;
- }
- std::unique_ptr<T, Del>* ptr;
- T* t_ptr;
- operator T**() {
- return &t_ptr;
- }
- ~PointerToPointerToUniquePointer() {
- *ptr = std::unique_ptr<T, Del>(t_ptr);
- }
- };
- template<typename T, typename Del> PointerToPointerToUniquePointer<T, Del> PointerToPointer(std::unique_ptr<T, Del>& arg) {
- return PointerToPointerToUniquePointer<T, Del>(&arg);
- }
- int main() {
- IDirect3DDevice9* p = ...; // ignore device & it's refcount for now
- std::unique_ptr<IDirect3DTexture9, COMDeleter> tex;
- p->CreateTexture(..., PointerToPointer(tex)); // all is good.
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement