d类型信息

//CT和RT类型信息
immutable abstract class NewTypeInfo {
    size_t tsize();
}

//给定T的实现.
immutable class NewTypeInfoImpl(T) : NewTypeInfo {
    override size_t tsize() {
        return T.sizeof;
    }
}

//用__typeid!T取T关联单件对象
@property immutable(NewTypeInfo) __typeid(T)() {
    static immutable singleton = new NewTypeInfoImpl!T;
    return singleton;
}

auto static_map_tf(alias F)(immutable NewTypeInfo[] types...)
{
    typeof(F(types[0]))[] result;
    result.length = types.length;
    foreach(i, t; types)
    {
        result[i] = F(t);
    }
    return result;
}

static assert(static_map_tf!(t => t.tsize)(__typeid!int, __typeid!ushort) == [4, 2]);

void main() {}
posted @ 2022-01-12 12:59  zjh6  阅读(6)  评论(0)    收藏  举报  来源