I am wrapping a C library using C++/CLI so that the C library can be used easily from C# in a C#'ish way.
Some of the functions in this library are for putting a value into a container. There are no generics in C so there exists a function per type CLIB_SetBool(BOOL value), CLIB_SetInt(int value), CLIB_SetString(char* string) and so on.
To make it easier to use from C#, I have created a single Set function which takes a System::Object.
I have two related questions:
With my method how would you use a switch statement on the type of System::Object to call the correct CLIB_Setxxxx function. [typeid is only for unmanaged code and I can't seem to use GetType.]
Is there a better way to wrap these functions like using a Generic? [I started using template specialisation but then realised that C# doesn't see templates.]
Thanks.
EDIT
How do I implement void Set(System::Object^ value) ?
I want to do something like:
void MyWrapper::Set(System::Object^ value)
{
switch(typeid(value))
{
case System::Int32: CLIB_SetInt(MyMarshal<clib_int>(value)); break;
case System::Double: CLIB_SetInt(MyMarshal<clib_double>(value)); break;
//and so on
}
}
The typeid fails for managed code and clearly the cases are invalid. How to fix?