瀏覽代碼

添加辅助别名

akemimadoka 7 年之前
父節點
當前提交
eff66dec61
共有 2 個文件被更改,包括 13 次插入1 次删除
  1. 1 1
      YumeBot/Jce.h
  2. 12 0
      YumeBot/Utility.h

+ 1 - 1
YumeBot/Jce.h

@@ -267,7 +267,7 @@ namespace YumeBot::Jce
 
 #define FIELD(name, tag, type, ...) \
 	{\
-		using FieldType = Utility::RemoveCvRef<decltype(ret->Get##name())>;\
+		using FieldType = typename Utility::MayRemoveTemplate<Utility::RemoveCvRef<decltype(ret->Get##name())>, std::optional>::Type;\
 		stream.Read<JceStruct::TypeEnum::type>(tag, ret->Get##name(),\
 			Utility::ReturnFirst<Utility::ConcatTrait<Utility::BindTrait<std::is_same, std::nullptr_t>::template Result, std::negation>::template Result, std::nullptr_t>(__VA_ARGS__));\
 	}

+ 12 - 0
YumeBot/Utility.h

@@ -157,4 +157,16 @@ namespace YumeBot::Utility
 
 	template <typename T>
 	using RemoveCvRef = std::remove_cv_t<std::remove_reference_t<T>>;
+
+	template <typename T, template <typename> class Template>
+	struct MayRemoveTemplate
+		: ResultType<T>
+	{
+	};
+
+	template <typename T, template <typename> class Template>
+	struct MayRemoveTemplate<Template<T>, Template>
+		: ResultType<T>
+	{
+	};
 }