繁体   English   中英

将类型存储为变量? 模板类?

[英]Storing a Type as a Variable? for a templated class?

我有一个模板化的类,具有以下定义:

ImageRescaleDepth<PIXEL_TYPE_INPUT, PIXEL_TYPE_OUTPUT>

此类使用模板,因为它应该是通用的,因此几乎用于所有内容。 无论如何,我需要制作此应用程序的命令行版本,以进行图像缩放,当前系统已设置为处理以下类型:

1BIT, 2BIT, 4BIT, unsigned 8 bit, signed 8 bit, unsigned 16 bit, signed 16 bit, unsigned 32 bit, signed 32 bit, float, double.

这些是通过命令行传递的,我将它们转换为枚举。

我不能修改ImageRescaleDepth类,因为它属于库的一部分。 而且我也不想创建一个巨大的switch或eliseif块,因为会有100种组合。 我有可能以某种方式将这些类型存储为变量吗? 然后将它们传递给构造函数?

不,必须在编译时知道模板类的类型,因此必须将图像类型类型提供给模板。 我必须说,如果此类旨在执行许多不同格式之间的转换,则使用模板参数来指定设计非常糟糕的转换标记。

为什么不切换到OOP? 您可以使用typeid()函数来获取类型名称和动态转换。

也许使用类型列表可以为您提供帮助。 参见例如boost :: mpl ,或简单地boost / std :: tuple。 这足以从初始列表中生成所有类型对的列表。 您的大开关可以通过递归模板元编程自动处理(即生成)(我不知道mpl是否为此提供了便利)。 但是,这并不是一件容易的事(我花了很多时间),因此,如果您只需要处理这种情况,借助脚本语言生成代码可能会更快!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM