“地图索引套件”使用的简单示例运行良好:
class_<map<int, string> >("testMap")
.def(map_indexing_suite<std::map<int, string>, true>())
;
在python方面,它的工作原理与预期一致:
a = riversim.testMap()
a[1]='sdf'
但是!
如果我尝试在映射中使用更复杂的对象BoundaryCondition
而不是string
,例如下一个:
enum t_boundary
{
DIRICHLET = 0,
NEUMAN
};
struct BoundaryCondition
{
t_boundary type = DIRICHLET;
double value = 0;
bool operator==(const BoundaryCondition& bc) const;
friend ostream& operator <<(ostream& write, const BoundaryCondition & boundary_condition);
};
typedef map<t_boundary_id, BoundaryCondition> t_BoundaryConditions;
BOOST_PYTHON_MODULE(riversim)
{
enum_<t_boundary>("t_boundary")
.value("DIRICHLET", DIRICHLET)
.value("NEUMAN", NEUMAN)
.export_values()
;
class_<BoundaryCondition>("BoundaryCondition")
.def_readwrite("value", &BoundaryCondition::value)
.def_readwrite("type", &BoundaryCondition::type)
.def(self == self)
;
//and problematic class:
class_<River::t_BoundaryConditions >("t_BoundaryConditions")
.def(map_indexing_suite<t_BoundaryConditions, true>())
;
}
它编译得很好,我可以导入riversim
:
import riversim
bound = riversim.t_boundary
bc = riversim.BoundaryCondition
bcs = riversim.t_BoundaryConditions
和下一个命令:
bcs[1] = bc
给出错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in
----> 1 bcs[1] = bc
TypeError: 'Boost.Python.class' object does not support item assignment
如何正确地将端口映射到python
ps:也使用了这个解决方案link,但它不起作用,得到了与上面相同的错误
首先
在班上助教。这是必须的
现在
导致
这是因为
bc
同样适用于以下两项工作:相关问题 更多 >
编程相关推荐