我有一个用C ++编写的程序,用户可以从显微镜图像中分割出一些细胞。完成后,程序将获得三个总体参数进行更改。这三个人是feature
,classifier
和reductionMethod
。
这些参数中的每一个都是作为初始化时相同的模板。我认为我可以通过以下实现来调用它:
if (feature == 1)
{
FastColorIntensityGradientFeature<8> workingFeature();
}
else if (feature == 2)
{
ColorIntensityGradientFeature<8> workingFeature();
}
workingFeature(input, var, var);
但这是不可能的,因为workingFeature
语句中初始化了if-else
。我怎么能这样做呢?我不习惯用C ++编程。
答案 0 :(得分:3)
使其工作的一种方法是将代码移动到具有模板参数的函数中,该模板参数采用您要处理的要素类型。样品:
template <typename IntensityGradientFeature>
void doWork() {
IntensityGradientFeature workingFeature;
workingFeature.doSomething();
}
然后你这样打电话:
if (feature == 1)
doWork< FastColorIntensityGradientFeature<8> >();
else if (feature == 2)
doWork< ColorIntensityGradientFeature<8> >();
答案 1 :(得分:0)
两个模板都可以有一个公共基类,然后你可以创建一个base类型的指针,然后在if
子句中创建所需的子类。
class base
{
public:
virtual void workingFeature(input, var, var);
};
template<int num>
class FastColorIntensityGradientFeature : public base
{
public:
virtual void workingFeature(input, var, var);
};
template<int num>
class ColorIntensityGradientFeature: public base
{
public:
virtual void workingFeature(input, var, var);
};
然后将if
子句更改为:
base * choice;
if (feature == 1)
{
choice = new FastColorIntensityGradientFeature<8>;
}
else if (feature == 2)
{
choice = new ColorIntensityGradientFeature<8>;
}
else
{
// some error handling
}
choice->workingFeature(input, var, var);
您没有为函数指定参数类型,但显然它们需要在类定义中存在。