o que há de errado com os fluxos de c ++ ao usar o boost.python?

Atualização 2: Não sei por que isso ainda está sendo votado (março de 2014). Isso parece estar resolvido, pois eu fiz essa pergunta há muitos anos. Verifique se você está usando uma versão recente do boost.

ATUALIZAÇÃO: Talvez os fluxos C ++ precisem ser inicializados para formatar números e a inicialização não está acontecendo quando a biblioteca compartilhada é carregada no Python?

eu estou chamando

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

em um método que é exportado para uma biblioteca compartilhada via boost.python. Não imprime nada, mas se eu fizer

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

funciona.

Isso é importante porque eu quero fazer isso:

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

Eu expus isso fazendo isso:

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))
    ;
}

mas quando ligo parastr método em python em um objeto Bernoulli, não recebo nada. Suspeito que o problema mais simples do cout esteja relacionado.

questionAnswers(3)

yourAnswerToTheQuestion