我有一個C++類的靜態含有某種(在這種特殊情況下「m_engine」)「靜態」:C++中的Boost.Python
class RndGenerator
{
public:
static void setInitialSeed(unsigned int seed);
static unsigned int rndNumber();
...
private:
...
RndGenerator();
static std::mt19937 m_engine;
};
這個類是在我的項目中廣泛使用,對C++級別。
通過Boost.Python的暴露RndGenerator後:
class_<RndGenerator, boost::noncopyable>("RndGenerator", no_init)
.def("setInitialSeed", &RndGenerator::setInitialSeed)
.staticmethod("setInitialSeed")
.def("rndNumber", &RndGenerator::rndNumber)
.staticmethod("rndNumber")
;
我想有可能從Python的級別設置的初始種子:
RndGenerator.setInitialSeed(1234)
我所期望的,這條線後,所有通話到RndGenerator :: rndNumber(),在C++級別,將考慮到剛纔指定的初始種子(1234)。 但事實並非如此。
包含暴露給Python的靜態成員的類有任何問題嗎? 或者我的問題涉及到RndGenerator的單態性質?
感謝您的回覆。就我而言,我懷疑,這可能與同一進程中的多個靜態數據成員實例有關。 – user765572
@ user765572當我遇到這種類型的問題時,我記錄了內存以確認是否有區別。一些編譯器和鏈接器需要爲該類提供存儲信息,如[this](http://stackoverflow.com/a/3492124/1053968)中所示。 –