重构，使用traits将类型信息抽出类定义之外，简化类型信息定义宏