c ++ 通用回调对象实现

时间:2021-02-22 19:00:37

标签: c++ c++11 actionscript-3 flash boost

EDIT:我在以下内容中重新提出了这个问题:new question

我目前正在使用 flash for c++ 的回调机制实现,ASInterface.inl 你可以在这里看到一个例子:

https://github.com/cpzhang/bud/blob/a37348b77fb2722c73d972a77827056b0b2344f6/trunk/tool/flash/ASInterface.inl#L393

我正在寻找这样的通用回调的标准实现(在 std 或 boost 或其他东西中),它不与 Flash 播放器耦合。 它所做的基本上是实现一个通用的 Callback 对象,该对象可以使用任意数量的原始类型参数进行调用。

//init callbacks
typedef std::map<std::wstring, Callback> callbacks;
void SomethingHappened(int a, int b) {print a + b;}
string functionName = "SomethingHappened";
callbacks[functionName] = &SomethingHappened;
//use callbacks after xml input arrived:
string xml = "<some xml input document/>";
Callbacks::iterator itCallback = callbacks.find(functionName);
if (itCallback != callbacks.end())
    {
        //parse arguments
        std::vector<std::wstring> args;
        _Args::split(xml, args);
        ASValue::Array arguments;
        for (size_t i = 0, s = args.size(); i < s; ++i)
        {
            ASValue arg; arg.FromXML(args[i]);
            arguments.push_back(arg);
        }
        ASValue returnValue;
        //***this is where the magic happens: call the function***
        HRESULT result = itCallback->second.Call(arguments, returnValue);
        return result;
    }

编辑这是我的流程: 我从“服务器”收到输入消息:消息(字符串命令,字符串 xmlArguments) 它找到名为:命令的回调 它调用带有参数的命令(数量和类型是任意的)。 我正在寻找的是通用命令的实现(如链接中所示。)

1 个答案:

答案 0 :(得分:0)

我没有仔细检查该代码的所有角落和缝隙,但是否有任何反对之处:

 using Callback = std::function<ASValue(ASValue::Array const&)>;

std::function 从 C++11 开始使用 C++。如果您没有那个 (?),您可以使用具有相同语义的 boost::function<>

相关问题