Gointerface接口声明实现及作用详解
293
2022-11-01
ports with generic types
解析字符串
BehaviorTree.CPP支持自动将字符串strings类型转换为公共类型,如int,long,double,bool,NodeStatus等;
用户定义的类型也可以被支持,如
// We want to be able to use this custom typestruct Position2D { double x; double y; };
为了将一个字符串解析进入一个Position2D,我们将一个模板BT::convertFromString
我们可以使用任何我们想要的语法,在本例子中,我们只是简单的将两个数字用分号分开;
// Template specialization to converts a string to Position2D.namespace BT{ template <> inline Position2D convertFromString(StringView str) { //The next line should be removed ... printf("Converting string: \"%s\"\n", str.data() ); // We expect real numbers separated by semicolons auto parts = splitString(str, ';'); if (parts.size() != 2) { throw RuntimeError("invalid input)"); } else{ Position2D output; output.x = convertFromString
解释:
StringView是一个C++11版本的std::string_view,可以传递std::string或者const char*;
本库提供了一个简单的splitString 函数,可以使用另外一个boost::algorithm::split.
一旦把输入分成了单独的数字,就可以重新使用convertFromString
例子:创建两个自定义行为,一个往端口写,一个从端口读
class CalculateGoal: public SyncActionNode{public: CalculateGoal(const std::string& name, const NodeConfiguration& config): SyncActionNode(name,config) {} static PortsList providedPorts() { return { OutputPort
一个Sequence有4个action的树:
存储一个Position2D类型的值到GoalPosition项中,使用action CalculateGoal;
调用PrintTarget,输入目标会从黑板的入口项GoalPosition中读取数据;
使用内建的行为SetBlackBoard来写键OtherGoal。将一个字符串转换为一个Position2D;
再次调用PrintTarget,输入端口target会从黑板中读取项-OtherGoal。
static const char* xml_text = R"(
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~