Классы C++
Код: Выделить всё
// ClassA.h
class ClassA {
public:
void MethodA() {};
};
// ClassB.h
class ClassB {
public:
void MethodB() {};
};
// ClassC.h
#include "ClassA.h"
#include "ClassB.h"
class ClassC : public ClassA, public ClassB {
public:
void MethodC() {};
};
// ClassD.h
#include "ClassA.h"
#include
class ClassD {
public:
std::shared_ptr GetClassA() {
return std::make_shared();
}
};
Код: Выделить всё
// ClassA_module.i
%module ClassA_module
%include
%shared_ptr(ClassA)
%interface(ClassA)
%include "ClassA.h"
// ClassB_module.i
%module ClassB_module
%include
%shared_ptr(ClassB)
%interface(ClassB)
%include "ClassB.h"
// ClassC_module.i
%module ClassC_module
%shared_ptr(ClassC)
%include "ClassC.h"
// ClassD_module.i
%module ClassD_module
%shared_ptr(ClassD)
%include "ClassD.h"
Предупреждение 833: предупреждение для ClassC, базовый класс B игнорируется. Множественное наследование не поддерживается в C#.
Но при этом будет использоваться интерфейс, созданный для метода GetClassA, когда ClassD обернут, генерируя приведенный ниже код:
Сгенерированный код оболочки C#
Код: Выделить всё
public ClassASwigInterface GetClassA() {
IntPtr cPtr = WrapperPINVOKE.ClassD_GetClassA(swigCPtr);
ClassASwigInterface ret = (cPtr == IntPtr.Zero) ? null : new ClassASwigInterface(cPtr, true);
if (WrapperPINVOKE.SWIGPendingException.Pending) throw WrapperPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
Ошибка CS0144: невозможно создать экземпляр абстрактного типа или интерфейса ClassASwigInterface.
Как правильно обернуть ClassD::GetClassA(), чтобы возвращаемый результат shared_ptr можно использовать на стороне C#, учитывая, что ClassA объявлен как интерфейс для поддержки множественного наследования в SWIG?
Подробнее здесь: https://stackoverflow.com/questions/797 ... s-an-inter
Мобильная версия