Обновление 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
в python для объекта Бернулли, я ничего не получаю. Я подозреваю, что связана более простая проблема cout.