Сейчас я смотрю некоторые коды из симулятора CARLA (http://carla.org/).
. Он предоставляет множество классов C ++ и функций-членов для python с использованием boost python. Но я не могу понять синтаксис из строк ниже ..
void export_blueprint() {
using namespace boost::python;
namespace cc = carla::client;
namespace crpc = carla::rpc;
...
class_<cc::ActorBlueprint>("ActorBlueprint", no_init)
.add_property("id", +[](const cc::ActorBlueprint &self) -> std::string {
return self.GetId();
})
.add_property("tags", &cc::ActorBlueprint::GetTags)
.def("contains_tag", &cc::ActorBlueprint::ContainsTag)
.def("match_tags", &cc::ActorBlueprint::MatchTags)
.def("contains_attribute", &cc::ActorBlueprint::ContainsAttribute)
.def("get_attribute", +[](const cc::ActorBlueprint &self, const std::string &id) -> cc::ActorAttribute {
return self.GetAttribute(id);
}) // <=== THESE LINES
.def("set_attribute", &cc::ActorBlueprint::SetAttribute)
.def("__len__", &cc::ActorBlueprint::size)
.def("__iter__", range(&cc::ActorBlueprint::begin, &cc::ActorBlueprint::end))
.def(self_ns::str(self_ns::self))
;
}
Что означает приведенный ниже код
.def("get_attribute", +[](const cc::ActorBlueprint &self,
const std::string &id) -> cc::ActorAttribute {
return self.GetAttribute(id);
})
? Похоже, что функция класса get_attribute класса ActorBlueprint была заново (переопределена) определена с новыми аргументами, передаваемыми из интерфейса python.Я почти уверен, но есть ли документ об этом синтаксисе? Я не смог найти его в https://www.boost.org/doc/libs/1_63_0/libs/python/doc/html/tutorial/index.html.