Есть ли возможность использовать обертки boost python в заголовках? - PullRequest
1 голос
/ 18 марта 2011

Есть ли способ использовать BOOST_PYTHON_MODULE в заголовочном файле? Например, я хотел бы иметь возможность объявить этот модуль

BOOST_PYTHON_MODULE(Status_Effect)
{
    boost::python::class_<StatusEffect>("StatusEffect")
        .def("GetPriority", &StatusEffect::GetPriority)
        .def("GetDescription", &StatusEffect::GetDescription)
        .def("GetName", &StatusEffect::GetName);
}

в заголовочном файле. Однако всякий раз, когда я пытаюсь это сделать, он жалуется на множественные определения. Кто-нибудь знает способ сделать обтекание в заголовочном файле?

Спасибо

1 Ответ

0 голосов
/ 18 марта 2011

Вот обходной путь: внутри скобок находится обычный код C ++. Таким образом, вы можете переместить эту часть во встроенную функцию.

Например, вы можете поместить это в заголовок:

inline void DeclareStatusEffect()
{
  boost::python::class_<StatusEffect>("StatusEffect")
    .def("GetPriority", &StatusEffect::GetPriority)
    .def("GetDescription", &StatusEffect::GetDescription)
    .def("GetName", &StatusEffect::GetName);

}

И это в ваш исходный файл:

BOOST_PYTHON_MODULE(Status_Effect)
{
  DeclareStatusEffect();
}

Вы также можете посмотреть, что делает макрос BOOST_PYTHON_MODULE, и, возможно, есть способ добавить еще больше в заголовок, но это, вероятно, небезопасно в будущих версиях Boost.Python, даже если вы получите его в работа.

...