2308C++技巧

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::反射这里.

你可能感兴趣的:(c++,cpp,c++,开发语言)