В вызове descriptionSObjects есть < url xsi: nil = & ldquo; true & rdquo; / > для атрибута, который вызывает исключение, & ldquo; элемент не может быть нулевым & rdquo;

Я вступил в ту же проблему и случайно открыл вторую нить. Простите за это. Один из способов, который работал для меня, заключался в том, чтобы разрешить его без множественного наследования.

#include <stdio.h>

class A
{
public:
    virtual void foo(void) = 0;
};

class B
{
public:
    virtual void foo(void) = 0;
};


class C
{
    class IA: public A
    {
        virtual void foo(void)
        {
            printf("IA::foo()\r\n");
        }
    };
    class IB: public B
    {
        virtual void foo(void)
        {
            printf("IB::foo()\r\n");
        }
    };

    IA m_A;
    IB m_B;
public:
    A* GetA(void)
    {
        return(&m_A);
    }

    B* GetB(void)
    {
        return(&m_B);
    }
};

Трюк заключается в определении классов, полученных из интерфейсов (A и B), в качестве локальных классов (IA и IB) вместо использования множественное наследование. Кроме того, этот подход также открывает возможность иметь несколько реализаций каждого интерфейса, если это необходимо, что было бы невозможно с помощью множественного наследования. Локальным классам IA и IB может быть легко предоставлен доступ к классу C, поэтому реализации обоих интерфейсов IA и IB могут совместно использовать данные.

Доступ к каждому интерфейсу может быть выполнен следующим образом:

main()
{
    C test;
    test.GetA()->foo();
    test.GetB()->foo();
}

... и нет никакой двусмысленности в отношении метода foo.

0
задан som 17 January 2019 в 02:35
поделиться