Передача некопируемого объекта C++ из C++ в функцию SwiftC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Передача некопируемого объекта C++ из C++ в функцию Swift

Сообщение Anonymous »

Вот простая структура C++ (реализации методов-членов тривиальны и опущены для краткости):

Код: Выделить всё

struct
SWIFT_NONCOPYABLE
CppStruct {
CppStruct() {}
CppStruct(const CppStruct&);
CppStruct(const CppStruct&&);

~CppStruct();

};
Рассмотрим простой класс Swift, в котором есть метод, принимающий указанную выше структуру C++:

Код: Выделить всё

public class SwiftProcessor {

public init() { }

public func processCppStruct(_ x : borrowing CppStruct) {
print("Processing a CppStruct..")
}
}

Метод Swift вызывается в другом месте кода C++:

Код: Выделить всё

  SwiftProcessor proc = SwiftProcessor::init();
CppStruct cppStruct;
proc.processCppStruct(cppStruct);
При компиляции этого кода C++ возникает следующая ошибка:

Код: Выделить всё

no member named 'processCppStruct' in 'SwiftProcessor'
.
Это в Ubuntu. Аналогичная ошибка сообщается в MacOS с использованием Xcode. Если SWIFT_NONCOPYABLE удален, это работает нормально на обеих платформах. В обоих случаях используется Swift 6.2.
Код Swift не будет компилироваться без указателя владения. Изменение заимствования на потребление или inout не помогает.
Похоже, что некопируемый тип C++ не может быть передан из C++ в метод Swift. Есть идеи, почему и как это обойти?

Подробнее здесь: https://stackoverflow.com/questions/797 ... t-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»