From 14d9efc39635dab2c6c0f791d6b0a63c92d941ee Mon Sep 17 00:00:00 2001 From: crupest Date: Sat, 22 Jan 2022 22:22:45 +0800 Subject: ... --- include/cru/ui/mapper/Mapper.hpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'include/cru/ui/mapper/Mapper.hpp') 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 #include #include @@ -41,6 +42,9 @@ class CRU_UI_API MapperBase : public Object { template class CRU_UI_API BasicMapper : public MapperBase { public: + static_assert(std::is_default_constructible_v, + "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 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 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 DoMapFromString(String str) { return nullptr; } - virtual std::unique_ptr DoMapFromXml(xml::XmlElementNode* node) { - return nullptr; - } + virtual T DoMapFromString(String str) { return {}; } + virtual T DoMapFromXml(xml::XmlElementNode* node) { return {}; } }; } // namespace cru::ui::mapper -- cgit v1.2.3