Skip to content

Instantly share code, notes, and snippets.

@battleguard
Created June 12, 2021 02:41
Show Gist options
  • Save battleguard/c7712e6bfa4e1d11f669d5d8e9a808cd to your computer and use it in GitHub Desktop.
Save battleguard/c7712e6bfa4e1d11f669d5d8e9a808cd to your computer and use it in GitHub Desktop.
c wrapper multiple inheritance
#include <iostream>
struct AuxData
{
virtual ~AuxData() = default;
virtual void PrintAuxData()
{
std::cout << "AuxData a: " << a << " b: " << b << std::endl;
}
int a = 1;
int b = 2;
};
struct IdData
{
virtual ~IdData() = default;
virtual void PrintStringData()
{
std::cout << "IdData c: " << c << std::endl;
}
int c = 3;
};
struct PlatformPart : IdData, AuxData
{
virtual void PrintPlatformPart()
{
std::cout << "PlatformPart d: " << d << std::endl;
}
int d = 4;
};
void* CreateAuxData()
{
return new AuxData;
}
void* CreateIdData()
{
return new IdData;
}
void* CreatePlatformPart()
{
return new PlatformPart;
}
void PrintAuxData(void* aVal)
{
static_cast<AuxData*>(aVal)->PrintAuxData();
}
void PrintIdData(void* aVal)
{
static_cast<IdData*>(aVal)->PrintStringData();
}
void PrintPlatformPart(void* aVal)
{
static_cast<PlatformPart*>(aVal)->PrintPlatformPart();
}
void* PlatformPartToAuxData(void* aVal)
{
return static_cast<AuxData*>(static_cast<PlatformPart*>(aVal));
}
void* PlatformPartToIdData(void* aVal)
{
return static_cast<IdData*>(static_cast<PlatformPart*>(aVal));
}
int main()
{
void* partPtrC = CreatePlatformPart();
PlatformPart* partPtr = static_cast<PlatformPart*>(partPtrC);
AuxData* auxPtr = partPtr;
IdData* idPtr = partPtr;
std::cout << "partPtr: " << partPtr << std::endl;
std::cout << "auxPtr: " << auxPtr << std::endl;
std::cout << "idPtr: " << idPtr << std::endl;
std::cout << "bad PrintAuxData from PlatformPart*" << std::endl;
PrintAuxData(partPtrC);
std::cout << "working PrintAuxData from PlatformPart*" << std::endl;
PrintAuxData(PlatformPartToAuxData(partPtrC));
// PrintIdData(CreatePlatformPart());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment