Проблемы с экспортом шаблонов - PullRequest
1 голос
/ 21 апреля 2011

Я не могу понять, как правильно экспортировать некоторые функции в python с помощью boost.python.

Я экспортировал этот класс CL_Rectf .Он наследует CL_Rectx<float>.

Теперь я хочу экспортировать функцию bounding_rect:

# In CL_Rectf class exporting
.def("BoundingRect", &CL_Rectf::bounding_rect, PYPOLICY_REFERENCE_EXISTING)

Он компилируется, но когда я использую этот код в python:

mBox = CL_Rectf()
mBox.BoundingRect(CL_Rectf(x, y, x2, y2))

У меня такая ошибка:

Boost.Python.ArgumentError: Python argument types in
    CL_Rectf.BoundingRect(CL_Rectf, CL_Rectf)
did not match C++ signature:
    BoundingRect(CL_Rectf {lvalue}, CL_Rectx<float>)

Что-то не так с экспортом из-за CL_Rectx в сигнатуре c ++.Что не так?

1 Ответ

1 голос
/ 21 апреля 2011

Не зная, в частности, Boost.Python, вы экспортировали CL_Rectf, но не CL_Rectx<float>.Поэтому, когда его просят преобразовать объект python в CL_Rectx<float>, Boost.Python не знает как, и вызывает исключение, которое вы видите.

Мой совет - забыть о CL_Floatf и экспортироватьCL_Rectx<float> класс вместо.CL_Rectf как класс C ++ - плохая идея на многих уровнях;Вы должны стараться избегать его использования даже в C ++.

...