привязка универсальных библиотек c ++ к python с boost.python - PullRequest
2 голосов
/ 08 июля 2010

Я хотел бы знать, что происходит при связывании библиотек C ++, которые написаны в общем виде.

Есть ли возможность связать класс шаблона, или вы можете связать только класс, сгенерированный шаблоном?

1 Ответ

3 голосов
/ 09 июля 2010

Вы можете связать только сгенерированный класс.Однако можно написать шаблонную функцию для экспорта вашего класса и вызывать эту функцию для каждого конкретного типа, который вы хотите экспортировать.Например:

template<class T>
struct foo {};

template<class T>
void export_foo(std::string name) { 
    boost::python::class_<foo<T>>(name.c_str());
}

BOOST_PYTHON_MODULE(foo)
{
    export_foo<int>("foo_int");
    export_foo<std::string>("foo_string");
    //...
}

Если этого недостаточно, вы также можете погрузиться в метапрограммирование (например, с Boost.MPL), создать списки типов и автоматически вызвать export_foo для всех этих типов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...