转自:http://stackoverflow.com/questions/9568150/what-is-a-c-delegate
Option 1 : functors:
A function object may be created by implementing operator()
struct Functor { // Normal class/struct members int operator()(double d) // Arbitrary return types and parameter list { return (int) d + 1; } }; // Use: Functor f; int i = f(3.14);
Option 2: lambda expressions (C++11 only)
// Syntax is roughly: [capture](parameter list) -> return type {block} // Some shortcuts exist auto func = [](int i) -> double { return 2*i/1.15; }; double d = func(1);
Option 3: function pointers
int f(double d) { ... } typedef int (*MyFuncT) (double d); MyFuncT fp = &f; int a = fp(3.14);
Option 4: pointer to member functions (fastest solution)
See Fast C++ Delegate (on The Code Project).
struct DelegateList { int f1(double d) { } int f2(double d) { } }; typedef int (DelegateList::* DelegateType)(double d); DelegateType d = &DelegateList::f1; DelegateList list; int a = (list.*d)(3.14);
Option 5: std::function
(or boost::function
if your standard library doesn't support it). It is slower, but it is the most flexible
#include <functional> std::function<int(double)> f = [can be set to about anything in this answer] // Usually more useful as a parameter to another functions
Option 6: binding
Allows setting some parameters in advance, convenient to call a member function for instance
struct MyClass { int DoStuff(double d); // actually a DoStuff(MyClass* this, double d) }; std::function<int(double d)> f = std::bind(&MyClass::DoStuff, this, std::placeholders::_1); // auto f = std::bind(...); in C++11
Option 7: templates
Accept anything as long as it matches the argument list.
template <class FunctionT> int DoSomething(FunctionT func) { return func(3.14); }
相关推荐
网上有很多关于C++ delegate机制的文章,但都讲的是函数指针的内容,上周就C++中实现C#的delegate机制的问题研究了好几天,查看了很多相关资料,才解决了问题,现将我写的C++ delegate测试程序贴出来,希望能帮到有...
用C++做项目的时候,尤其是写客户端的时候经常会有事件回调的设计,一般的方式是使用虚函数表,用一个虚基类包含...但这种方式和C++11的lamda不兼容,为了更方便的实现事件回调机制,使用delegate是很不错的一种方式。
在C++编程中,"委托"(Delegate)的概念源自于其他一些编程语言,如C#或Java,但在C++标准库中并没有内置的委托机制。然而,通过一些编程技巧,我们可以模拟实现类似的功能。委托通常用于传递函数或者方法作为参数,...
delegate?.setValue(value: value) } ... } ``` 当SenderViewController调用`sendValue`时,它会通过Delegate向ReceiverViewController发送值。在ReceiverViewController的`setValue`方法中,我们可以接收到这个...
在iOS开发中,Delegate是一种非常重要的设计模式,它允许对象之间进行通信,特别是当一个对象(委托者)需要通知另一个对象(委托对象)某些事件发生时。本文将深入讲解“简单的Delegate实现”,并以实际代码为例,...
在Objective-C中,`delegate`是一种关键的编程模式,用于实现对象间的通信。本文将深入探讨如何在iPhone编程中使用`delegate`,并以一个名为"MyDelegateSample"的示例项目来说明。 首先,`delegate`是Objective-C中...
delegate?.didReceiveValue(value: yourValue) ``` 4. 实现协议: 在A页面(假设为`AViewController`),需要实现`BToAProtocol`,并设置自身为B页面的Delegate: ```swift class AViewController: ...
delegate?.receivedData(data) } ``` 五、处理接收到的数据 5. 在实现协议的类中,重写`receivedData:`方法以处理接收到的数据: ```objc - (void)receivedData:(id)data { NSLog(@"Received data: %@", data); ...
在iOS开发中,Delegate是一种非常重要的设计模式,它允许对象之间进行通信,使得一个对象能够对另一个对象的行为进行响应。本篇文章将通过“delegate五步曲”,帮助你深入理解并熟练掌握如何在iOS应用中使用Delegate...
在Page A中,我们需要创建一个`PageB`的对象,并将其`delegate`属性设置为Page A自身。这通常在`prepare(for:sender:)`方法中完成,因为这是在页面跳转前被调用的: ```swift override func prepare(for segue: ...
在.NET框架中,Delegate是事件处理和回调机制的关键组成部分,它代表了一组方法的签名,允许我们传递方法作为参数或创建方法的组合。这个“Delegate小Demo”显然是一个用于学习和复习Delegate用法的示例项目。让我们...
delegate?.performAction() } ``` 这个"IOS开发delegate Demo"可能包含了一个简单的场景,例如,当用户点击按钮时,ViewController作为Delegate接收到通知并执行相应操作。实践中,Delegate可以用来处理各种交互,...
delegate?.handleAction(data: data) } } ``` 4. **连接代理**:在Xcode中,使用Interface Builder或在代码中设置委托,确保发送者和接收者之间的联系。 ```swift // 在 storyboard 中 senderViewController....
在这个"C# Delegate小例子"中,我们将深入探讨Delegate的概念、使用方式以及它在实际编程中的应用。 1. **Delegate概念**: Delegate在C#中是一种类,它代表对方法的引用。这种引用是类型安全的,意味着在编译时就...
在.NET框架中,Delegate是类型安全的函数指针,它允许我们引用方法并像操作对象一样操作它们。Delegate是事件处理、回调函数和多播委托等核心编程概念的基础。在这个"Delegate小Demo"中,我们将深入理解Delegate的...
delegate_execute.exe
5. **反射调用**:通过`Type.GetMethod`获取接口中对应的方法信息,然后使用`Delegate.CreateDelegate`创建一个委托,最后通过委托来执行实际的方法调用。 在实际应用中,效率是一个关键因素。由于反射在运行时动态...
delegate?.didReceiveData(data) } } ``` ```objective-c @interface SenderViewController : UIViewController @property (nonatomic, weak) id<DataTransferDelegate> delegate; - (void)sendData; @end @...
delegate?.didReceiveValue(valueToPass) } ``` ```objective-c - (void)sendValue { id valueToPass = @"传递的数据"; [self.delegate didReceiveValue:valueToPass]; } ``` 与Android的`onActivityResult`...
在iOS和macOS开发中,`delegate`模式是一种常见的设计模式,用于实现对象间的通信。在标题"delegate一对多"中,"一对多"指的是一个委托(delegate)对象可以同时处理多个其他对象的请求或事件。这种模式尤其在UI组件...