_pRemoteCharacteristic->registerForNotify(std::bind(&Lpf2Hub::notifyCallback, this, _1, _2, _3, _4));`
This should look quite similar in your use case because the function has always 4 parameters and for the member function an additional (normally hidden) parameter (the instance of the class where the member function is located) is used. So it should always look like the following: `<remoteCharacteristicInstance>->registerForNotify(std::bind(&<ClassName>::<memberFunctionCallbackName>, this, _1, _2, _3, _4));` where you can replace `<remoteCharacteristicInstance>`, `<ClassName>`, `<memberFunctionCallbackName>` with the names of your implementation.

You can find my implementation here: 
https://github.com/username_0/legoino/blob/da277284de1e10144cef5294c159babe3fe473e2/src/Lpf2Hub.cpp#L955
And the header file with the addtional using of std::placeholders:
https://github.com/username_0/legoino/blob/da277284de1e10144cef5294c159babe3fe473e2/src/Lpf2Hub.h#L15
<issue_comment>username_1: Great description @username_0 I'd like to add this to the documentation.
<issue_comment>username_2: @username_0 Thanks for that, it was the _1 syntax that was confusing me and stackoverflow helped with a code sample (https://stackoverflow.com/a/47946395) with an explicit mention of the placeholders namespace (and the realisation you might be _using_ that namespace).

The new syntax allows the callback to be created in advance of use, so my preferred approach is...
```
using namespace std::placeholders;
notify_callback callback = std::bind(&<ClassName>::<memberFunctionCallbackName>, this, _1, _2, _3, _4);
<remoteCharacteristicInstance>->subscribe(true, callback); // true for notifications, false for indications
```

That makes sure the callback is of the right type, and might help in the case of compilation issues. The include of the functional header is not required explicitly as it is pulled in with the NimBLEDevice header.
<issue_comment>username_0: @username_2 Very good hint with the not needed include of the functional header and the idea of defining the callback in advance. I will change my code in my library accordingly. 
@username_1 I would suggest to use @username_2's code snipped for documentation because of the use of the `subscribe` method instead of the deprecated `registerForNotify` method and the creation of the callback pointer in advance. Maybe you can add two examples in the documentation. One for the "old" way of using a callback with a function pointer to a static method and one with the example from @username_2 above
<issue_comment>username_1: Reopening this for exposure so others will see it if interested. Will close again when documented.

Thanks @username_0 and @username_2 for the detailed descriptions.
<issue_comment>username_2: @username_1 Looks to still be closed?
<issue_comment>username_1: Oops, got ahead of myself.
<issue_comment>username_1: I am using your library to connect to multiple BLE devices (LEGO hubs) at the same time. With your support we have managed to connect up to 9 devices. 

I have now another issue when connecting to multiple remote characteristics of several devices. **With the current implementation of the callback function i can only use a static function and not a member function as a callback**. This leads to the problem, that every connected device use the same static callback function and i can not preserve state or handle the notifications of different devices in a member function of a class. 

This problem with callbacks is described in several stackoverflow posts:
https://stackoverflow.com/questions/400257/how-can-i-pass-a-class-member-function-as-a-callback#402385
https://stackoverflow.com/questions/14189440/c-callback-using-class-member/14189561#14189561
https://cognitivewaves.wordpress.com/callbacks/

**One solution is to use the std::bind and std::function functionality which was introduced in C++11**

I have tested the following changes in the NimBLERemoteCharacteristic.h file:

1. Add` #include <functional>` to be able to use the std::function functionallity
2. Change the typedef of the callback as follows
`typedef std::function<void (NimBLERemoteCharacteristic* pBLERemoteCharacteristic,
                                uint8_t* pData, size_t length, bool isNotify)> notify_callback;`

With that changes i could use the "old" way of defining the callback function without any error
`_pRemoteCharacteristic->registerForNotify(notifyCallback); // nofifyCallback is a pointer to a static function
`
and i can use now with the `std::bind` functionality the "new" way of defining the callback function which enables me to use a member function instead of a static function
`_pRemoteCharacteristic->registerForNotify(std::bind(&Lpf2Hub::notifyCallback, this, _1, _2, _3, _4)); // notifyCallback is now a member function`

Maybe you can check this improvement and add it to one of your next releases. I think its a "transparent" change where the "old" static callback functions will work without changes in the client code which uses your library. I can also state a pull request with my changes that you can check it directly. I have added the follwing PR with the working changes (https://github.com/username_1/NimBLE-Arduino/pull/123)

I know that the `registerForNotify` method is marked as deprecated an i should replace it with the `subscribe` method but in principal this callback thing is also valid for the new `subscribe` method

@giancann, @lucadentella: With this issue solved, the legoino issue (https://github.com/username_0/legoino/issues/19) could also be solved but it is a prerequisite to solve it in the NimBLE library

@username_1 : Thanks in advance to have a look on that issue!
<issue_comment>username_1: Finally documented this 😅  closing now.<issue_closed>Technologies
Magtech CleanRange®
Magtech CleanRange®
Magtech CleanRange® cartridges are loaded with high-tech lead-free primers and fully encapsulated bullets, which eliminates the shooter's exposure to lead and other heavy metals.
Magtech CleanRange® ammunition is environmentally friendly and enables cleaner air, cleaner shooting ranges, cleaner firearms – and lower maintenance costs.
Magtech CleanRange® is used by several law enforcement agencies worldwide, including some of the most demanding ones when it comes to quality and reliability.
Magtech CleanRange® is available in calibers 9mm,.380ACP,.38SPL,.40S&W and.45ACP.
This is a placeholder page for Edward Grossi, which means this person is not currently on this site. We do suggest using the tools below to find Edward Grossi.
You are visiting the placeholder page for Edward Grossi. This page is here because someone used our placeholder utility to look for Edward Grossi. We created this page automatically in hopes Edward Grossi would find it. If you are not Edward Grossi, but are an alumni of Metuchen High School, register on this site for free now.if this exits with a 1603 can I ignore that and continue for code after.
Please show us the line you are using.

Execute-MSI -Action Uninstall -Path “{D346782C-C0DC-4758-9019-1C71C12F041F}” -ContinueOnError $true -LogName "removeMSI.log"
Also having the exact error messages would help.
I was hoping to get the PSADT error message as to why Execute-MSI can’t just $ContinueOnError.
Since Execute-MSI calls Execute-Process, maybe try to cut out the middle-man and call Execute-Process directly.
I have to admit, I have never needed to continue after an MSI fails.
If you want to ignore 1603, which means a fatal error. Then just remove the uninstall commando.
Or doesn’t this happen on all machines?
Anyway continue on error is the key.
What is “Connected Learning”?
Cultural Anthropologist Mimi Ito spoke at the University of Pittsburgh this week on connected learning—a new model meant to tap into the potential of information and online collaboration available to youth in a digital age. She sat down with us to share what connected learning means, and how to apply it to help today’s students.
Remake Learning: You’ve probably been asked this