【问题标题】:c++ A Generic Callback object implementationc++ 通用回调对象实现
【发布时间】:2021-05-25 01:21:40
【问题描述】:

编辑:我已将这个问题改写为:new question

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

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

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

//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;
    }

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

【问题讨论】:

  • 什么是xmlArguments?是要从中解析参数的 xml 文档吗?为什么不像给定的实现那样将其解析为ASValue::Array?我仍然看不到任何需要使用其他调用签名调用的函数
  • @sehe 我想让代码更简单,我从服务器获取一个包含函数名称和参数的 xml。
  • @sehe:我已经转发了这个问题,希望现在更清楚:stackoverflow.com/q/66329804/3234641

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


【解决方案1】:

我没有仔细检查该代码的所有角落和缝隙,但有什么反对这一点:

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

std::function 自 c++11 起就在 C++ 中。如果您没有那个 (?),您可以使用具有相同语义的 boost::function&lt;&gt;

【讨论】:

  • 是的,但如果我错了请纠正我,在这里你调用一个函数,它获取一个数组作为参数,而不是任意的 arglist?我想在我的代码中支持现有函数,这些函数获取诸如 foo(int a,int b) 而不是 foo(array values) 之类的参数,然后解析值
  • @AssafShouval 这就是您的代码所做的对吗?我在您的代码中没有看到任何其他函数调用。
  • 我想在我的代码中支持现有函数,这些函数获取 foo(int a,int b) 而不是 foo(array values) 之类的参数,然后解析值
  • 哪个方向?你能澄清这个问题,以便清楚你想写什么吗?
  • 谢谢,我已经编辑了我的问题并最终解释了流程
猜你喜欢
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多