在函数参数中传递几种类

时间:2016-04-15 15:33:30

标签: c++ templates enums

我有一个枚举类:

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

谢谢!

2 个答案:

答案 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();
}

希望传达这个想法。