我有一个模板化的类,其定义如下:
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类,因为它是库的一部分。我并不想创造一个巨大的开关或eliseif块,因为会有100种组合。有可能,我可以以某种方式将这些类型存储为变量?然后将它们传递给构造函数?
答案 0 :(得分:5)
不,必须在编译时知道模板类的类型,因此必须将模型类型类型提供给模板。我不得不说,如果这个类打算在许多不同格式之间进行转换,那么使用模板参数来指定非常差的设计转换。
答案 1 :(得分:0)
为什么不切换到OOP?您可以使用typeid()函数来获取类型名称和动态强制转换。
答案 2 :(得分:0)
也许使用类型列表可以帮助您。参见例如boost::mpl,或者只是boost / std :: tuple。这足以生成初始列表中所有类型对的列表。您的大开关可以使用递归模板元编程自动处理(即生成)(我不知道mpl是否具有此功能)。然而,这不是微不足道的(我花了很多时间),所以如果你只需要处理这个案例,在脚本语言的帮助下生成代码可能会更快!