将Lua代码转换为C ++

时间:2012-06-22 05:33:11

标签: c++ lua

我目前有这段代码:

PACKETS = {};

function AddPacket(data)
    local id = data.ID;
    PACKETS[id] = {
    data.IP,
    data.PORT,
    data.PACKET,
    data.SOURCEIP,
    data.SOURCEPORT,
    data.PPMS};
end

function RemovePacket(id)
    PACKETS[id] = nil;
end

function LoopedThread()
    for k,v in pairs(PACKETS) do
        for i=1, v.PPMS do
            SendPacket(v.IP, v.PORT, v.PACKET, v.SOURCEIP, v.SOURCEPORT);
        end
    end
    Sleep(1);
end

这是以lua为例进行的,但是我需要在C ++中完成。我有点困惑,因为我无法在尝试制作时工作,如果有人可以帮助我,甚至让我开始,谢谢。

我已经编写了套接字。

2 个答案:

答案 0 :(得分:1)

难道你不能只将Lua与C / C ++集成吗?这种语言的构建是为了与C / C ++轻松集成,这在游戏开发中很常见。我建议你使用luabind。它是boost::python库的Lua版本。链接:vhttp://www.rasterbar.com/products/luabind.html

答案 1 :(得分:0)

您是否熟悉C ++中的Standard Template Library?它可能有一堆容器类型,可以帮助你完成你正在尝试的东西。

对我来说,看起来你正在做的事情将通过实现包含成员变量“IP”,“PORT”等的“Packet”结构或类来实现。

然后,如果您想存储它们并通过其ID访问它们,您可以创建一个stl::map,从ID号映射到数据包。

或者,与数据包一样,您最终可能希望以先进先出的方式存储它们,这可以使用stl::queue来完成。随着队列的出现,它们按照你输入的顺序排列,所以如果你排队1,2和3以及后来去访问其中的两个,你将按顺序获得数据包1和2,3将仍然留待以后。

我的C ++非常生疏,但我想的是这样的事情:

struct Packet {
    char* ip;
    short port;
    // ... etc ...
}

stl::queue<Packet> packet_buffer;

void AddPacket(const Packet& packet_in) {
    packet_buffer.push(packet_in);
}

void RemoveLastPacket() {
    packet_buffer.pop();
}

void LoopedThread() {
    while (!packet_buffer.empty()) {
        SendPacket(packet_buffer.front());
        RemoveLastPacket();
    }
}

您可以使用地图执行类似操作,但速度会更慢且效率更低。除非你真的需要根据其ID查找特定的数据包,否则我会坚持使用一个队列,这可能会非常快。