将 C++ 枚举类暴露给 Python 代码时出错

我必须将 C++ 枚举类公开到 python 中。我已经检查了一些例子,但都是关于 C 风格的enum类型。但是,我需要使用enum类。有什么建议吗?


这是我的代码:


zoo.h


namespace extzoo

{

namespace intzoo

{

class zoo

{

public:

enum class Size

{

small, medium, large

};

const std::string hello_zoo();

const std::string getname_zoo();

const Size get_size();

void set_size(Size);

private:

Size size;

};

}

}

zoo.cpp


using namespace extzoo::intzoo;

using namespace extzoo;

const std::string zoo::hello_zoo() {

return std::string("hello, zoo");

}

const std::string zoo::getname_zoo() {

std::string input;

std::cout<<"Please enter your favorit zoo name: ";

std::getline(std::cin,input);

return std::string("Your favorit zoo name is: ").append(input);

}

const zoo::Size zoo::get_size()

{

return this->size;

}

void zoo::set_size(zoo::Size s)

{

this->size = s;

}

我将 C++ 方法暴露给 python 的代码


pyintf.cpp


class DummyZoo{

};

BOOST_PYTHON_MODULE(pyintf) {

extzoo::intzoo::

python::enum_<zoo::Size>("Size")

.value("small", zoo::small)

.value("medium", zoo::medium)

.value("large", zoo::large)

;

scope intzoo

= class_<DummyZoo>("intzoo");

class_<intzoo::zoo>("zoo")

.def("hello_zoo", &extzoo::intzoo::zoo::hello_zoo)

.def("getname_zoo", &extzoo::intzoo::zoo::getname_zoo)

.def("get_size",&extzoo::intzoo::zoo::get_size)

.def("set_size",&extzoo::intzoo::zoo::set_size)

;

}



jeck猫
浏览 276回答 1
1回答

HUH函数

与您之前的SO 问题相同,问题是类方法定义未在名称空间内定义。使用using namespace ...是为了带来该命名空间内容的可见性,而不是定义该命名空间的内容。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python