我有一个枚举类:
enum Info
{
TYPE_1,
TYPE_2
};
取决于Info的类型,我必须创建我拥有的两个不同类中的一个:Demo1,Demo2,然后将它传递给将处理内容的函数handle
。 (这两个类具有相同的特征)。现在我在我的枚举上做了一个if/else if
然后我为每个调用了2个单独的函数...但是这两个函数做同样的事情...我想创建一个模板函数,可以作为参数或其他类,但我无法创建它......
if (Info == TYPE_1)
{
Demo1 d1;
handle1(d1);
}
else if (Info == TYPE_2)
{
Demo2 d2;
handle2(d2);
}
...
void handle1(Demo1 &d1)
{
d1.getName();
}
void handle2(Demo2 &d2)
{
d2.getName();
}
我有什么选择更好的编码风格?
可能会创建模板类= Demo1或Demo2 ,然后将参数中的此模板类传递给唯一函数handle
?
谢谢!
答案 0 :(得分:2)
不清楚,但我认为你正在寻找像这样简单的东西:
template<typename T>
void handle(T &t)
{
t.getName();
}
并将其用作
handle(d1);
...
handle(d2);
而不是单独的handle1和handle2
答案 1 :(得分:1)
听起来像是多态性的好候选人。
class DemoAbs {
public:
void getName() = 0;
};
class Demo1 public DemoAbs {
public:
void getName() { //impl here }
};
class Demo2 public DemoAbs {
public:
void getName() { //impl here }
}
DemoAbs *demo = 0;
if (Info == TYPE_1) {
demo = new Demo1();
} else if(Info == TYPE_2) {
demo = new Demo2();
}
handle(demo);
void handle(DemoAbs *demo) {
demo->getName();
}
希望传达这个想法。