【发布时间】:2014-05-06 09:14:29
【问题描述】:
我有一个 C++ 类,其中包含某种“静态”(在这种特殊情况下为“m_engine”):
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)
我希望,在这一行之后,在 C++ 级别上对 RndGenerator::rndNumber() 的所有调用都会考虑刚刚指定的初始种子 (1234)。 然而事实并非如此。
包含暴露给 Python 的静态成员的类有什么问题吗? 还是我的问题与 RndGenerator 的单例性质有关?
【问题讨论】:
标签: c++ boost-python