Опитвам се да опаковам някакъв C++ код в Cython и се сблъсках с проблем при опит да предам метод от клас като аргумент към функция.
Не знам дали го прави по-ясно, но клас A представлява статистически модел (така че myAMethod използва не само предадените аргументи, но и много променливи на екземпляр), а B има различни методи за минимизиране на предадената функция.
В C++ имам нещо от този стил:
class A
{
public:
double myAMethod(double*)
};
class B
{
public:
double myBMethod(A&, double (A::*f) (double*)
}
Така че това, което се опитвам да направя, е да използвам екземпляри на A и B в кода на Cython. Нямах проблеми с опаковането на класовете, но когато се опитам да използвам myBMethod, не знам как да предам указател от вида A::*myAMethod
Ако направя това: myBMethod(ptrToAObj[0], &ptrToAObj.myAMethod)
, тогава Cython компилира този код до [...] &ptrToAObj->myAMethod [...]
и получавам съобщението, което човек би очаквал от g++:
"ISO C++ забранява вземането на адреса на обвързана членска функция за формиране на указател към членска функция."
Но ако се опитам да посоча направо към метода на класа и направя myBMethod(ptrToAObj[0], A.myAMethod)
, Cython няма да компилира и ще каже, че
myAMethod не е статичен член от A.
И това е почти всичко, което успях да напредна. Бих могъл да работя на ниво C++ и да избегна някое от тези неприятности, но ако можех да използвам екземпляри на A и B в Python (чрез Cython) интерактивно, това щеше да ми помогне да ускоря темпото си на разработка. Всяка помощ ще бъде наистина оценена и се извинявам, ако на този въпрос вече е отговорено и/или е наличен в референтен справочник - търся SO, препратка към Cython и книгата "Cython" на Смит и не намерих тази тема адресирана. Благодаря предварително!