zengine-old/engine/3rdparty/zlib/include/refl/detail/convert.h
2024-06-25 20:26:46 +08:00

29 lines
948 B
C++

#pragma once
#include "any.h"
#include <unordered_map>
namespace refl {
using UClassPair = std::pair<const UClass*, const UClass*>;
// 自定义哈希函数
struct UClassPairHash {
std::size_t operator()(const UClassPair& pair) const {
std::hash<const UClass*> ptr_hash;
return ptr_hash(pair.first) ^ (ptr_hash(pair.second) << 1);
}
};
struct UClassPairEqual {
bool operator()(const UClassPair& lhs, const UClassPair& rhs) const {
return lhs.first == rhs.first && lhs.second == rhs.second;
}
};
using ConvertFunc = bool (*)(Any& to, const Any& from);
using ConvertMap = std::unordered_map<UClassPair, ConvertFunc, UClassPairHash, UClassPairEqual>;
class Convert {
protected:
static ConvertMap BuildClassMap();
template<typename From, typename To>
static bool ConvertTo(Any& to, const Any& from);
public:
static bool Construct(Any& to,const Any& from);
inline static ConvertMap ClassMap = BuildClassMap();
};
}