C++ 将类型存储为变量?对于模板类?

C++ 将类型存储为变量?对于模板类?,c++,templates,types,C++,Templates,Types,我有一个模板类,定义如下: ImageRescaleDepth<PIXEL_TYPE_INPUT, PIXEL_TYPE_OUTPUT> 这些是通过命令行传入的,我将它们转换为枚举 我无法修改ImageRescaleDepth类,因为它是库的一部分。我不想创建一个巨大的开关或eliseif块,因为会有100个组合。有没有可能,我可以以某种方式将这些类型存储为变量?然后将它们传递给构造函数?否,模板类的类型必须在编译时已知,因此必须将图像类型提供给模板。我不得不说,如果这个类打算在许

我有一个模板类,定义如下:

ImageRescaleDepth<PIXEL_TYPE_INPUT, PIXEL_TYPE_OUTPUT>
这些是通过命令行传入的,我将它们转换为枚举



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

否,模板类的类型必须在编译时已知,因此必须将图像类型提供给模板。我不得不说,如果这个类打算在许多不同的格式之间执行转换,那么使用模板参数来指定转换有点糟糕的设计。

不,模板类的类型必须在编译时已知,因此必须将图像类型提供给模板。我不得不说,如果这个类打算在许多不同的格式之间执行转换,那么使用模板参数来指定转换有点糟糕的设计。

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

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

也许使用类型列表可以帮助您。例如,请参见boost/std::tuple。这足够强大,可以从初始列表生成所有类型对的列表。您的大交换机可以通过递归模板元编程自动处理(即生成)(我不知道mpl是否有这方面的设施)。然而,这并不是一件小事(我花了很多时间),所以如果您只需要处理这一个案例,那么使用脚本语言生成代码可能会更快

也许使用类型列表可以帮助你。例如,请参见boost/std::tuple。这足够强大,可以从初始列表生成所有类型对的列表。您的大交换机可以通过递归模板元编程自动处理(即生成)(我不知道mpl是否有这方面的设施)。然而,这并不是一件小事(我花了很多时间),所以如果您只需要处理这一个案例,那么使用脚本语言生成代码可能会更快

我知道。因此,将100个元素作为开关大小写是最好的解决方案?我会使用一个映射,键入一对from/to类型(作为枚举或常量,而不是类型名),指向指向某种创建函数的指针。换句话说,factory.和creation函数是对每对类型的模板的每个特定实例化的调用(我猜这个模板有一个像convert(Imageconst&,Image&)这样的方法),map没有帮助,因为没有公共基类。我没有说基类的map,我说的是创造功能的地图,我知道。因此,将100个元素作为开关大小写是最好的解决方案?我会使用一个映射,键入一对from/to类型(作为枚举或常量,而不是类型名),指向指向某种创建函数的指针。换句话说,factory.和creation函数是对每对类型的模板的每个特定实例化的调用(我猜这个模板有一个像convert(Imageconst&,Image&)这样的方法),map没有帮助,因为没有公共基类。我没有说基类的map,我说的是创造功能的地图。我不太明白你到底需要什么。你能写下这个巨大的开关是什么样子的吗?我正在使用OOP这个巨大的开关是用来调用相应的构造函数的。我不太明白你到底需要什么。你能写下这个巨大的开关是什么样子的吗?我正在使用OOP这个巨大的开关是用来调用相应的构造函数的。
1BIT, 2BIT, 4BIT, unsigned 8 bit, signed 8 bit, unsigned 16 bit, signed 16 bit, unsigned 32 bit, signed 32 bit, float, double.