Kotlin,表/数组基于动态字段的条目

我正在做g-truc gli的kotlin端口 ,实际上我正在考虑稍微改变一下设计。

Gli使用纹理格式,types,swizzles等的内部rapresentation( gli::format等)。

在这个测试中 ,它实例化GL结构,传递配置文件,然后读取翻译后的gli格式:

 gli::gl GL(gli::gl::PROFILE_KTX); gli::texture2d TextureA(gli::FORMAT_RGB8_UNORM_PACK8, gli::texture2d::extent_type(2), 1, gli::texture2d::swizzles_type(gli::SWIZZLE_RED, gli::SWIZZLE_GREEN, gli::SWIZZLE_BLUE, gli::SWIZZLE_ALPHA)); gli::gl::format FormatA = GL.translate(TextureA.format(), TextureA.swizzles()); 

translate()将从表中获取,并且您传递给构造函数的配置文件是需要的,因为该表中的某些输入字段是依赖于配置文件的 :

 inline gl::gl(profile Profile) : Profile(Profile) { bool const HasSwizzle = has_swizzle(Profile); external_format const ExternalBGR = HasSwizzle ? EXTERNAL_RGB : EXTERNAL_BGR; ... format_desc const Table[] = ... } 

该表中的每个条目都是以下结构体 :

 struct format_desc { internal_format Internal; external_format External; type_format Type; unsigned int Properties; }; 

目前我执行的基本上是一样的,一个在任务中的GL类将初始化table

 class GL(val profile: Profile) { private val tableF: Array init { val hasSwizzle = profile.hasSwizzle val externalBGR = if (hasSwizzle) ExternalFormat.RGB else ExternalFormat.BGR ... tableF = arrayOf(...) } } 

而我的tableFFormatDesc类组成 :

 private class FormatDesc(val internal: InternalFormat, val external: ExternalFormat, val type: TypeFormat, val properties: Int) 

但是,如果可能的话,我想避免实例设计,因为通常我只是将实例用于纹理创建,而没有其他任何东西。 另外,以这种方式,我会避免创建一个新的类。

所以我想了一个可能的替代解决方案,并且使用lambdaexpression式和一个动态表,并使用基于lambda的条目。

我会用一个object替换class ,然后设置profile ,然后下一个translate调用将从表中获取并执行lambda。

这样我的FormatDesc将会改变

 private class FormatDesc( private val internalFun: () -> InternalFormat, private val externalFun: () -> ExternalFormat, private val typeFun: () -> TypeFormat, val properties: Int) { val internal get() = internalFun.invoke() val external get() = externalFun.invoke() val type get() = typeFun.invoke() } 

由于大多数输入字段是静态的,例如:

 FormatDesc(RGB_PVRTC_4BPPV1, NONE_, NONE, 0) 

我可以编写额外的构造函数来接收普通的值,而不是lambdaexpression式,以避免包装所有内容,但就是这样。

这是一个很好的方式来实现基于动态条目表还是有更好/更简单的解决方案?