更新2:なぜこれがまだ賛成されているのかわかりません(2014年3月)。私が何年も前にこの質問をしたので、これは修正されたようです。最新バージョンのブーストを使用していることを確認してください。
更新:おそらく、数値をフォーマットするために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の問題が関係しているのではないかと思います。