我的接口层次结构如下:
class interface1
{
public:
virtual ~interface1() = 0;
}
class interface2 : public interface1
{
public:
virtual ~interface2() = 0;
}
我的数据模型具有可以从Interface1或interface2派生的类:
class cls1 : public interface1
{
}
class cls2 : public interface2
{
}
我想编写一个在interface1或interface2上均可使用的重载函数
void function1(interface1 * obj)
{
// do something here
}
void function1(interface2 * obj)
{
// do something here
}
现在,我想同时创建cls1和cls2的对象,并调用function1:
{
.........
cls1 *p1 = new cls1;
cls2 *p2 = new cls2;
function1(p1);
function1(p2);
.........
}
我的问题是-在两种情况下,总是调用function1(interface1 * obj)。我不想将if-else与dynamic_cast结合使用(这是创建接口层次结构的重点)。
谁能建议我一种使用cls2对象调用function1(interface2 * obj)的方法?
最佳答案
您尝试做的事情听起来与虚拟功能非常相似。为什么不将function1
定义为类的成员函数:
class interface1
{
public:
virtual void function1()
{
// Do what you want to do when deriving from interface1
}
}
class interface2 : public interface1
{
public:
virtual void function1()
{
// Do what you want to do when deriving from interface2
}
}