SMTK
@SMTK_VERSION@
Simulation Modeling Tool Kit
smtk
SharedFromThis.h
Go to the documentation of this file.
1
//=========================================================================
2
// Copyright (c) Kitware, Inc.
3
// All rights reserved.
4
// See LICENSE.txt for details.
5
//
6
// This software is distributed WITHOUT ANY WARRANTY; without even
7
// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
8
// PURPOSE. See the above copyright notice for more information.
9
//=========================================================================
10
#ifndef smtk_SharedFromThis_h
11
#define smtk_SharedFromThis_h
12
16
#include "smtk/SharedPtr.h"
17
18
#include <string>
19
21
#define smtkTypedefs(...) \
22
typedef __VA_ARGS__ SelfType; \
23
typedef smtk::shared_ptr<__VA_ARGS__> Ptr; \
24
typedef smtk::shared_ptr<const __VA_ARGS__> ConstPtr; \
25
typedef smtk::weak_ptr<__VA_ARGS__> WeakPtr; \
26
typedef smtk::weak_ptr<const __VA_ARGS__> WeakConstPtr
27
51
#define smtkTypeMacro(...) \
52
smtkTypedefs(__VA_ARGS__); \
53
static constexpr const char* const type_name = #__VA_ARGS__; \
54
std::string typeName() const override { return type_name; }
55
#define smtkTypeMacroBase(...) \
56
smtkTypedefs(__VA_ARGS__); \
57
static constexpr const char* const type_name = #__VA_ARGS__; \
58
virtual std::string typeName() const { return type_name; }
59
62
68
#define smtkTypenameMacro(...) \
69
static constexpr const char* const type_name = #__VA_ARGS__; \
70
std::string typeName() const override { return type_name; }
71
#define smtkTypenameMacroBase(...) \
72
static constexpr const char* const type_name = #__VA_ARGS__; \
73
virtual std::string typeName() const { return type_name; }
74
87
#define smtkSuperclassMacro(...) \
88
typedef __VA_ARGS__ Superclass; \
89
typedef smtk::shared_ptr<__VA_ARGS__> SuperclassPtr
90
113
#define smtkCreateMacro(...) \
114
static smtk::shared_ptr<SelfType> create() \
115
{ \
116
smtk::shared_ptr<__VA_ARGS__> shared(new SelfType); \
117
return smtk::static_pointer_cast<SelfType>(shared); \
118
} \
119
/* variant for declarative programming: */
\
120
static smtk::shared_ptr<SelfType> create(smtk::shared_ptr<SelfType>& ref) \
121
{ \
122
ref = SelfType::create(); \
123
return ref; \
124
}
125
154
#define smtkEnableSharedPtr(...) \
155
public \
156
smtk::enable_shared_from_this<__VA_ARGS__>
157
190
#define smtkSharedFromThisMacro(...) \
191
typedef __VA_ARGS__ SharedPtrBaseType; \
192
smtk::shared_ptr<SelfType> shared_from_this() \
193
{ \
194
return smtk::static_pointer_cast<SelfType>(SharedPtrBaseType::shared_from_this()); \
195
} \
196
smtk::shared_ptr<const SelfType> shared_from_this() const \
197
{ \
198
return smtk::static_pointer_cast<const SelfType>(SharedPtrBaseType::shared_from_this()); \
199
}
200
207
#define smtkSharedPtrCreateMacro(...) \
208
smtkSharedFromThisMacro(__VA_ARGS__); \
209
smtkCreateMacro(__VA_ARGS__)
210
242
#define smtkSharedPtrHelper(...) \
243
smtk::static_pointer_cast<SelfType>(SharedPtrBaseType::Ptr(__VA_ARGS__))
244
245
#endif // smtk_SharedFromThis_h
Generated by
1.8.17