aboutsummaryrefslogtreecommitdiff
path: root/include/cru/ui/mapper/Mapper.hpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-01-22 22:22:45 +0800
committercrupest <crupest@outlook.com>2022-01-22 22:22:45 +0800
commit14d9efc39635dab2c6c0f791d6b0a63c92d941ee (patch)
tree0e974083611d5725a2135928749026ac237884f4 /include/cru/ui/mapper/Mapper.hpp
parent0e71e7022ee4cfec5b27e178ee1bb7d6977f6b3e (diff)
downloadcru-14d9efc39635dab2c6c0f791d6b0a63c92d941ee.tar.gz
cru-14d9efc39635dab2c6c0f791d6b0a63c92d941ee.tar.bz2
cru-14d9efc39635dab2c6c0f791d6b0a63c92d941ee.zip
...
Diffstat (limited to 'include/cru/ui/mapper/Mapper.hpp')
-rw-r--r--include/cru/ui/mapper/Mapper.hpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/include/cru/ui/mapper/Mapper.hpp b/include/cru/ui/mapper/Mapper.hpp
index 79aa39aa..d15b63aa 100644
--- a/include/cru/ui/mapper/Mapper.hpp
+++ b/include/cru/ui/mapper/Mapper.hpp
@@ -5,6 +5,7 @@
#include "cru/common/Exception.hpp"
#include "cru/xml/XmlNode.hpp"
+#include <type_traits>
#include <typeindex>
#include <typeinfo>
@@ -41,6 +42,9 @@ class CRU_UI_API MapperBase : public Object {
template <typename T>
class CRU_UI_API BasicMapper : public MapperBase {
public:
+ static_assert(std::is_default_constructible_v<T>,
+ "T must be default constructible.");
+
BasicMapper() : MapperBase(typeid(T)) {}
CRU_DELETE_COPY(BasicMapper)
@@ -49,7 +53,7 @@ class CRU_UI_API BasicMapper : public MapperBase {
~BasicMapper() override = default;
virtual bool SupportMapFromString() { return false; }
- virtual std::unique_ptr<T> MapFromString(String str) {
+ virtual T MapFromString(String str) {
if (!SupportMapFromString()) {
throw Exception(u"This mapper does not support map from string.");
}
@@ -61,7 +65,7 @@ class CRU_UI_API BasicMapper : public MapperBase {
virtual bool XmlElementIsOfThisType(xml::XmlElementNode* node) {
return false;
}
- std::unique_ptr<T> MapFromXml(xml::XmlElementNode* node) {
+ T MapFromXml(xml::XmlElementNode* node) {
if (!SupportMapFromXml()) {
throw new Exception(u"This mapper does not support map from xml.");
}
@@ -74,9 +78,7 @@ class CRU_UI_API BasicMapper : public MapperBase {
}
protected:
- virtual std::unique_ptr<T> DoMapFromString(String str) { return nullptr; }
- virtual std::unique_ptr<T> DoMapFromXml(xml::XmlElementNode* node) {
- return nullptr;
- }
+ virtual T DoMapFromString(String str) { return {}; }
+ virtual T DoMapFromXml(xml::XmlElementNode* node) { return {}; }
};
} // namespace cru::ui::mapper