В кодовой базе, над которой я сейчас работаю, много примеров кода, подобного этому. Это тонкая оболочка C для OS API.
// From the OS
HANDLE CreateObject();
void CloseHandle(HANDLE);
typedef struct tagFOO {} FOO;
FOO* Foo_New()
{
return (FOO*)CreateObject();
}
void Foo_Delete(FOO* foo)
{
if(foo != NULL)
{
CloseHandle((HANDLE)foo);
}
}
void Foo_Bar(FOO* foo)
{
if(foo != NULL)
{
HANDLE h = (HANDLE)foo;
// Do something interesting with h
}
}
Кажется, это работает, и я хочу не касаться этого, если могу, но хорошо ли это определено? Это кажется мне очень подозрительным