微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c ++ 通用回调对象实现

如何解决c ++ 通用回调对象实现

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) 它找到名为:命令的回调 它调用带有参数的命令(数量和类型是任意的)。 我正在寻找的是通用命令的实现(如链接中所示。)

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。