Спасибо, я только что попробовал это. К сожалению, это не сработало.

ление 2: я не уверен, почему это все еще голосуется (март 2014). Кажется, это исправлено, так как я задал этот вопрос много лет назад. Убедитесь, что вы используете последнюю версию Boost.

ОБНОВЛЕНИЕ: Возможно, потоки C ++ должны быть инициализированы для форматирования чисел, и инициализация не происходит, когда разделяемая библиотека загружается в Python?

я звоню

cout << 1 << "!" << endl; 

в методе, который экспортируется в общую библиотеку через boost.python. Он ничего не печатает, но если я сделаю

cout << "%" << "!" << endl; 

оно работает.

Это важно, потому что я хочу сделать это:

ostream& operator <<(ostream &os, const Bernoulli& b) {
    ostringstream oss;
    oss << b.p() * 100.0 << "%";
    return os << oss.str();
}

Я показал это, сделав это:

BOOST_PYTHON_MODULE(libdistributions)
{
    class_<Bernoulli>("Bernoulli")
        .def(init<>())
        .def(init<double>())

        .def("p", &Bernoulli::p)
        .def("set_p", &Bernoulli::set_p)
        .def("not_p", &Bernoulli::not_p)

        .def("Entropy", &Bernoulli::Entropy)
        .def("KL", &Bernoulli::KL)
        .def(self_ns::str(self))
    ;
}

но когда я звонюstr Метод в питоне на объект Бернулли, я ничего не получаю. Я подозреваю, что более простая проблема cout связана.

Ответы на вопрос(3)

Ваш ответ на вопрос