主要内容是更加规范的编译期行为与基于继承的Object反射

This commit is contained in:
2025-08-21 15:41:58 +08:00
parent 32e099b621
commit 004f2f3367
10 changed files with 1217 additions and 0 deletions

37
detail/CP/CBool.hpp Normal file
View File

@@ -0,0 +1,37 @@
#pragma once
#ifndef __FILE_Detail_CP_CBool_Hpp
#define __FILE_Detail_CP_CBool_Hpp
#define Operator(name,operator,closer)\
template<typename First, typename Second> bool name(const First& first, const Second& second) { return closer(first) operator closer(second); }\
template<typename First, typename... Args> bool name(const First& first, const Args&... args) { return closer(first) operator name(args...);}
#define TrueCloser(x) (!!x)
Operator(And, &&, TrueCloser);
Operator(Or, || , TrueCloser);
#undef Operator
#undef TrueCloser
namespace Internal
{
template<bool First, bool... Value> class CAnd_t;
template<bool First, bool... Value> class COr_t;
template<> class CAnd_t<true> : public std::true_type {};
template<> class CAnd_t<false> : public std::false_type {};
template<bool... Value> class CAnd_t<true, Value...> : public CAnd_t<Value...> {};
template<bool... Value> class CAnd_t<false, Value...> : public std::false_type {};
template<> class COr_t<true> : public std::true_type {};
template<> class COr_t<false> : public std::false_type {};
template<bool... Value> class COr_t<true, Value...> : public std::true_type {};
template<bool... Value> class COr_t<false, Value...> : public COr_t<Value...> {};
}
template<bool First, bool... Value> constexpr bool CAnd = Internal::CAnd_t<First, Value...>::value;
template<bool First, bool... Value> constexpr bool COr = Internal::COr_t<First, Value...>::value;
template<bool First, bool... Value> constexpr bool CXor = CAnd<First, Value...> != COr<First, Value...>;
template<bool Value> constexpr bool CNot = false == Value;
#endif // !__FILE_Detail_CP_CBool_Hpp