为相扑和静脉执行 setDisallowed setAllowed 时出错?

Error while Implementing setDisallowed setAllowed for Sumo and Veins?

我正在尝试在使用静脉时为 mysumo 场景 (traci.lane.setDisallowed) 实施 TraCi 命令。我在 TraciCommandInterface.cpp 中创建了一个新命令,例如:

void TraCICommandInterface::Lane::setDisallowed(std::list<std::string> disallowedClasses)
{
    TraCIBuffer buf = connection->query(CMD_SET_LANE_VARIABLE, TraCIBuffer() << LANE_DISALLOWED << laneId << TYPE_STRINGLIST << disallowedClasses);
    ASSERT(buf.eof());
}

并称呼为:

std::list<std::string> disallowedClasses = {"all"};
if (simTime()==20) {
    TraCICommandInterface* cInt = getCommandInterface();
    cInt->lane("ed_1_0").setDisallowed(disallowedClasses);
}

问题是我收到错误: 对命令 0xc3 的回答有错误:调度命令 195 后 requestMessage 中的位置错误。预期的命令长度为 38,但读取了 18 个字节。

我执行命令的方式有问题吗?为什么会出现这个问题有什么建议吗?

从 Veins 5.0 开始,TraCIBuffer 只有一些 C++ 数据类型的重载,特别是 std::stringsimtime_tTraCICoord(参见 here). All other types are sent as stored in memory (by casting to char*) (see here) - 对于 std::list.

肯定不是个好主意

关于如何将std::list<std::string>序列化为表示TYPE_STRINGLIST SUMO/TraCI期望的二进制blob的copy/paste-able代码,参见TraCICommandInterface::Vehicle::changeVehicleRoute(const std::list<std::string>& edges)的代码,可用 here.