Created
June 12, 2021 02:41
-
-
Save battleguard/c7712e6bfa4e1d11f669d5d8e9a808cd to your computer and use it in GitHub Desktop.
c wrapper multiple inheritance
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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