C++ 在函数参数中传递几种类型的类
我有一个枚举类:C++ 在函数参数中传递几种类型的类,c++,templates,enums,C++,Templates,Enums,我有一个枚举类: enum Info { TYPE_1, TYPE_2 }; 根据信息的类型,我必须创建我拥有的两个不同类中的一个:Demo1、Demo2,然后将其传递给一个函数句柄,该句柄将处理这些内容。这两个类具有相同的特征。现在我在我的枚举上做了一个if/elseif,然后我为每个调用2个单独的函数。。。但是这两个函数做同样的事情。。。我想创建一个模板函数,它可以作为一个或另一个类的参数,但我无法创建它 if (Info == TYPE_1) { Demo1 d1;
enum Info
{
TYPE_1,
TYPE_2
};
根据信息的类型,我必须创建我拥有的两个不同类中的一个:Demo1、Demo2,然后将其传递给一个函数句柄,该句柄将处理这些内容。这两个类具有相同的特征。现在我在我的枚举上做了一个if/elseif,然后我为每个调用2个单独的函数。。。但是这两个函数做同样的事情。。。我想创建一个模板函数,它可以作为一个或另一个类的参数,但我无法创建它
if (Info == TYPE_1)
{
Demo1 d1;
handle1(d1);
}
else if (Info == TYPE_2)
{
Demo2 d2;
handle2(d2);
}
对于更好的编码风格,我有什么选择?
是否可以创建一个模板类=Demo1或Demo2,然后将此模板类传入参数中以传递给唯一的函数句柄
谢谢 不清楚,但我认为您正在寻找这样简单的东西:
template<typename T>
void handle(T &t)
{
t.getName();
}
与单独的handle1和handle2不同,handle1和handle2似乎是多态性的一个很好的候选者
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();
}
希望这能传达这个想法。这些类型是继承层次结构的一部分,还是恰好具有相同接口或至少有一个子集相同的完全不相关的类型?信息是运行时值还是编译时值?这部分在父类父类的函数Parent::func中,Demo1和Demo2是父级的子级,它们是在Parent::func中创建的。Info是父项的枚举优先级。我不知道是否有更好的封装方法…谢谢,这实际上是一个非常简单的方法来解决我的问题!我想在我的类Parrent中将这个函数句柄原型化为函数类。即使这个函数也是一个模板,我也可以这样做吗?模板函数可以是一个类的成员,是的。
handle(d1);
...
handle(d2);
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();
}