133d722a9Sopenharmony_ci{{#title Function pointers — Rust ♡ C++}}
233d722a9Sopenharmony_ci# Function pointers
333d722a9Sopenharmony_ci
433d722a9Sopenharmony_ci### Public API:
533d722a9Sopenharmony_ci
633d722a9Sopenharmony_ci```cpp,hidelines
733d722a9Sopenharmony_ci// rust/cxx.h
833d722a9Sopenharmony_ci#
933d722a9Sopenharmony_ci# namespace rust {
1033d722a9Sopenharmony_ci
1133d722a9Sopenharmony_citemplate <typename Signature>
1233d722a9Sopenharmony_ciclass Fn;
1333d722a9Sopenharmony_ci
1433d722a9Sopenharmony_citemplate <typename Ret, typename... Args>
1533d722a9Sopenharmony_ciclass Fn<Ret(Args...)> final {
1633d722a9Sopenharmony_cipublic:
1733d722a9Sopenharmony_ci  Ret operator()(Args... args) const noexcept;
1833d722a9Sopenharmony_ci  Fn operator*() const noexcept;
1933d722a9Sopenharmony_ci};
2033d722a9Sopenharmony_ci#
2133d722a9Sopenharmony_ci# } // namespace rust
2233d722a9Sopenharmony_ci```
2333d722a9Sopenharmony_ci
2433d722a9Sopenharmony_ci### Restrictions:
2533d722a9Sopenharmony_ci
2633d722a9Sopenharmony_ciFunction pointers with a Result return type are not implemented yet.
2733d722a9Sopenharmony_ci
2833d722a9Sopenharmony_ciPassing a function pointer from C++ to Rust is not implemented yet, only from
2933d722a9Sopenharmony_ciRust to an `extern "C++"` function is implemented.
3033d722a9Sopenharmony_ci
3133d722a9Sopenharmony_ci## Example
3233d722a9Sopenharmony_ci
3333d722a9Sopenharmony_ciFunction pointers are commonly useful for implementing [async functions over
3433d722a9Sopenharmony_ciFFI](../async.md). See the example code on that page.
35