Как прокомментировано, проблема глубоко внутри бэкэнда (ошибка синтаксического анализа), которая превращает имя std::function
в нечто неузнаваемое. Это делается для ряда обходных путей, которые я пробовал.
Наиболее близкое решение, которое я могу придумать, заключается в следующем:
cppyy.cppdef("""
struct VecDArg : public std::vector<double> {
VecDArg(const std::vector<double>& v) : std::vector<double>(v) {}
};
double wrap_callback_vector(const std::function<double(VecDArg)>& wrap, const std::vector<double>& x) {
return callback_vector(wrap, x);
}
""")
cppyy.gbl.callback_vector = cppyy.gbl.wrap_callback_vector
cppyy.gbl.callback_vector(callback, [1])
Причина, по которой вышеприведенное работает, заключается в том, что скрывает имя типа от бэкэнда и таким образом предотвращает проблему с анализом. Исходя из std::vector
, класс Python в большинстве своем не мудрый.
EDIT : теперь исправлен в репо. Будет частью релиза 1.7.0. Спасибо за сообщение!