我在我的代码中使用匿名委托调用此示例函数:
public static int TestFunction(int a, int b) {
return a + b;
}
Run Code Online (Sandbox Code Playgroud)
代表看起来像这样:
var del = new Func<int, int, int>(TestFunction);
Run Code Online (Sandbox Code Playgroud)
我的问题是:你如何指定一个void返回类型TResult?以下不起作用:
public static void OtherFunction(int a, string b) { ... }
var del = new Func<int, string, void>(OtherFunction);
Run Code Online (Sandbox Code Playgroud) 我已经就此事做了一些研究,但还没有找到具体的解决方案.我真的希望能够做到这一点:
public delegate void VoidFloatCallback(float elapsedTime);
public VoidFloatCallback OnEveryUpdate;
public VoidFloatCallback OnNextUpdate;
public virtual void Update(GameTime gameTime)
{
if (OnNextUpdate != null)
{
OnNextUpdate(gameTime);
OnNextUpdate = null;
}
if (OnEveryUpdate != null)
{
OnEveryUpdate(gameTime);
}
this.OnUpdate(gameTime);
}
Run Code Online (Sandbox Code Playgroud)
但是在C++当然.我发现只有一种解决方案可以为我提供这样的功能; 但此后一直处于脱机状态,但我将其转发到http://codepad.org/WIVvFHv0.我发现解决方案的唯一问题是它不是现代的C++ 11代码,缺乏lambda支持.
我知道我可以用
std::function
Run Code Online (Sandbox Code Playgroud)
但是,唯一的问题是它不支持的运营商" ,".现在我已经考虑过创建自己的Events类并拥有一个+=-===
vector<std::function>
Run Code Online (Sandbox Code Playgroud)
有一些模板,但我发现std :: function没有实现运算符,==所以我不能让它看起来像C#那样.
无论如何,我的问题是:
我想知道如何使用C++ 11实现这样的事件系统 - 或者甚至是可能的.或者即使您知道一种更好/正确的方法来实现支持多个侦听器的回调(我想尽可能避免完整的Observer模式实现.)
更新#1
我对运营商的意图是这样的:
void some_func(float f) { /** do something with f **/ }
void some_other_func(float f) { /** do something …Run Code Online (Sandbox Code Playgroud)