2009-12-21 64 views
1

我有一个模板类,具有以下定义:将类型存储为变量?对于模板类?

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个组合。是否有可能,我可以以某种方式将这些类型存储为变量?然后将它们传递给构造函数?

回答

5

不,编译时必须知道模板类的类型,因此必须将图像类型类型提供给模板。我不得不说,如果这个类是为了执行许多不同格式之间的转换,使用模板参数来指定非常差设计的转换。

+0

我知道。 那么制作一个100个元件的开关盒是最好的解决方案吗? – UberJumper 2009-12-21 12:36:27

+2

我会使用一个映射,键入一对from/to类型(作为枚举或常量,而不是类型名称)到指向某种创建函数的指针。换句话说,一家工厂。 – 2009-12-21 12:38:52

+0

创建函数是调用每个类型的模板的每个特定的实例(我想这个模板有一个像转换的方法(图片< PIXEL_IN > const&,图片< PIXEL_OUt >&)) – 2009-12-21 14:06:35

0

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

+0

你能详细解释一下吗? – UberJumper 2009-12-21 12:51:33

+0

我不明白你需要什么。你能写出巨型开关的样子吗? – marpetr 2009-12-21 13:56:19

+0

我正在使用OOP大开关将用于调用相应的构造函数。 – UberJumper 2009-12-21 14:28:20

0

也许使用类型列表可以帮助你。例如参见boost::mpl,或者简单地说是boost/std :: tuple。这足以让您从初始列表中生成所有类型对的列表。你的大开关可以通过递归模板元编程自动处理(即生成)(我不知道mpl是否有此功能)。然而,这不是微不足道的(我花了好几个小时),所以如果你只需要处理这种情况,那么在脚本语言的帮助下生成代码可能会更快!

相关问题