summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2015-12-21 20:25:37 +0100
committerJose <jose@zeroc.com>2015-12-21 20:25:37 +0100
commitc083ab5442209aa47ebda83a264e73765f47b4a2 (patch)
treec41f56a4ec28526adf322bff460b62745183e4e6 /cpp
parentC++ shared_from_this simplifications (diff)
downloadice-c083ab5442209aa47ebda83a264e73765f47b4a2.tar.bz2
ice-c083ab5442209aa47ebda83a264e73765f47b4a2.tar.xz
ice-c083ab5442209aa47ebda83a264e73765f47b4a2.zip
Add missing Ice/VirtualShared.h
Diffstat (limited to 'cpp')
-rw-r--r--cpp/include/Ice/VirtualShared.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/cpp/include/Ice/VirtualShared.h b/cpp/include/Ice/VirtualShared.h
new file mode 100644
index 00000000000..afa472a9b75
--- /dev/null
+++ b/cpp/include/Ice/VirtualShared.h
@@ -0,0 +1,64 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#ifndef ICE_VIRTUAL_SHARED_H
+#define ICE_VIRTUAL_SHARED_H
+
+#include <IceUtil/Config.h>
+
+namespace Ice
+{
+
+#ifdef ICE_CPP11_MAPPING
+
+class VirtualEnableSharedFromThisBase : public std::enable_shared_from_this<VirtualEnableSharedFromThisBase>
+{
+public:
+ virtual ~ VirtualEnableSharedFromThisBase() = default;
+};
+
+template<typename T> class VirtualEnableSharedFromThis : public virtual VirtualEnableSharedFromThisBase
+{
+
+public:
+
+ std::shared_ptr<T> shared_from_this() const
+ {
+ return std::dynamic_pointer_cast<T>(VirtualEnableSharedFromThis::shared_from_this());
+ }
+};
+
+# define ICE_SHARED Ice::VirtualEnableSharedFromThisBase
+# define ICE_LOCAL_OBJECT Ice::VirtualEnableSharedFromThisBase
+# define ICE_ENABLE_SHARED_FROM_THIS(T) Ice::VirtualEnableSharedFromThis<T>
+
+#else
+
+// C++98
+
+template<typename T> class EnableSharedFromThis : virtual public IceUtil::Shared
+{
+public:
+
+ T* shared_from_this() const
+ {
+ return static_cast<T*>(const_cast<EnableSharedFromThis<T>*>(this));
+ }
+};
+
+# define ICE_SHARED IceUtil::Shared
+# define ICE_LOCAL_OBJECT Ice::LocalObject
+# define ICE_ENABLE_SHARED_FROM_THIS(T) Ice::EnableSharedFromThis<T>
+
+
+#endif
+
+}
+
+#endif