struct ubiq {template <class Type>constexpr operator Type() const {return Type{};};
};
//
int i = ubiq{};
double d = ubiq{};
char c = ubiq{};
//可以多个同时初化.
template <class T, std::size_t... I>
constexpr auto 类型转标识数组(std::size_t* types) noexcept -> decltype(T{ ubiq<I>{types}... }) {return T{ ubiq<I>{types}... };//...
}
然后,可以从元组
造T
,从而实现反射
.
有ADL的详细解释
在用户的名字空间实现策略,函数在用户
空间实现策略
!
简化替失非错
的:
template <typename T, typename = void>
struct is_smart_pointer : std::false_type
{
};template <typename T>
struct is_smart_pointer<T,
std::void_t<decltype(std::declval<T>().operator ->()),decltype(std::declval<T>().get())>> : std::true_type
{
};常式 静 串视 名(){中 串视(#构名,型长(#构名)-1);}
//这里#是把(名字=>"名字")这种.用 值型=推导(取值类型(t));中 冻结::无序映<冻结::串,值型,型长...(I)>{{过滤串(数组[I]),值型{原位索引<I>,取<I>(t)}}...};
这里值型
为变量,就是用向量<变量>
保存T
内容.
元<类 T,类=空>
构 A:假型{};元<类 T>
构 A<T,空型<推导(B<T>::G())>>:真型{};
这样,借助空型
可推导真假
.如:
元<类 T,类=空>构 是反射:假型{};
元<类 T>
构 是反射<T,空型<推导(反射成员<T>::数组())>>:真型{};
有数组()
函数的,就是可反射
的.
在iguana::反射
这里.