问题描述
EDIT:我在以下内容中重新提出了这个问题:new question
我目前正在使用 flash for c++ 的回调机制实现,ASInterface.inl 你可以在这里看到一个例子:
我正在寻找这样的通用回调的标准实现(在 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<>
。