How do I interoperate with C APIs std::any in C++?

Interoperating with C APIs in C++ can sometimes be a challenge, especially when dealing with varying data types. The std::any feature introduced in C++17 can be used effectively for this purpose. It allows you to store a value of any type, which can help bridge the gap between C-style APIs and C++ type-safe features. Here is how you can do it:

#include #include extern "C" { typedef void* MyCHandle; MyCHandle CreateHandle(int value) { return reinterpret_cast(new std::any(value)); } int GetValue(MyCHandle handle) { if (handle) { return std::any_cast(*(std::any*)handle); } return 0; } void DestroyHandle(MyCHandle handle) { delete reinterpret_cast<:any>(handle); } } int main() { MyCHandle handle = CreateHandle(42); std::cout << "Value: " << GetValue(handle) << std::endl; DestroyHandle(handle); return 0; }

C++ C APIs std::any interoperability C-style APIs type safety