17#include <drogon/exports.h>
24#pragma warning(disable : 4250)
43 static const std::string name{
"DrObjectBase"};
50 virtual bool isClass(
const std::string &class_name)
const
64 static constexpr auto check(C *) -> std::enable_if_t<
65 std::is_same_v<
decltype(C::isAutoCreation),
const bool>,
68 return C::isAutoCreation;
72 static constexpr bool check(...)
77 static constexpr bool value = check<T>(
nullptr);
90 return alloc_.className();
93 static const std::string &classTypeName()
95 return alloc_.className();
98 bool isClass(
const std::string &class_name)
const override
124 template <
typename D>
127 if constexpr (std::is_default_constructible<D>::value)
131 []() -> DrObjectBase * {
return new T; },
132 []() -> std::shared_ptr<DrObjectBase> {
133 return std::make_shared<T>();
136 else if constexpr (isAutoCreationClass<D>::value)
138 static_assert(std::is_default_constructible<D>::value,
139 "Class is not default constructable!");
145 static DrAllocator alloc_;
149typename DrObject<T>::DrAllocator DrObject<T>::alloc_;
static std::string demangle(const char *mangled_name)
demangle the type name which is returned by typeid(T).name().
Definition DrClassMap.h:116
static void registerClass(const std::string &className, const DrAllocFunc &func, const DrSharedAllocFunc &sharedFunc=nullptr)
Register a class into the map.
The base class for all drogon reflection classes.
Definition DrObject.h:34
virtual const std::string & className() const
Get the class name.
Definition DrObject.h:41
virtual bool isClass(const std::string &class_name) const
Return true if the class name is 'class_name'.
Definition DrObject.h:50
bool isClass(const std::string &class_name) const override
Return true if the class name is 'class_name'.
Definition DrObject.h:98
const std::string & className() const override
Get the class name.
Definition DrObject.h:88
Drogon Test is a minimal effort test framework developed because the major C++ test frameworks doesn'...
Definition Attribute.h:23