我的接口层次结构如下:

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
    }
}

10-08 08:24