У меня есть программа которая работает с файлами, все готово кроме интерфейса, я бы его спокойно могла бы доделать на C++, но сроки поджимают. Можно ли сделать на Python интерфейс, а на C++ функции? Ну как-нибудь из Python вызывать их?
Предположим, у вас есть простой пример класса C ++, который вы хотите вызвать из питона, в файле с именем foo.cpp:
#include <iostream>
class Foo{
public:
void bar(){
std::cout << "Hello" << std::endl;
}
};
Поскольку ctypes могут взаимодействовать только с функциями C, вам необходимо предоставить те, которые объявляют их как extern "C"
:
extern "C" {
Foo* Foo_new(){ return new Foo(); }
void Foo_bar(Foo* foo){ foo->bar(); }
}
Теперь компилируем это в библиотеку:
g++ -c -fPIC foo.cpp -o foo.o
g++ -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o
И, наконец, вам нужно написать свою оболочку(например, в fooWrapper.py):
from ctypes import cdll
lib = cdll.LoadLibrary('./libfoo.so')
class Foo(object):
def __init__(self):
self.obj = lib.Foo_new()
def bar(self):
lib.Foo_bar(self.obj)
Теперь все работает ;)
f = Foo()
f.bar() # and you will see "Hello" on the screen
source
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Дано натуральное число x и количество рядов равное 5 как вывести сумму ряда?
Начал изучения библиотеки clang для парсинга кодаМне необходимо найти все комментарии
Каким образом в QT можно получить превью картинки с яндекскартинок