So basically I have pointers to classes that are members of another class. I know for sure they are members and I know their member names. What I want to do is get a pointer to the class object that contains them. I messed around for a bit and came up with this, but it's ugly. Anyone know of some better way, or should I just stick with this?
#include "pch.h"
#include <iostream>
/**
#################################################################
##
#################################################################
**/
class CClassA
{
public:
CClassA(int i) : m_iVal(i) {}
public:
int m_iVal;
};
/**
#################################################################
##
#################################################################
**/
class CClassC1 : public CClassA
{
public:
CClassC1() : CClassA(1) {}
};
//################################################################
class CClassC2 : public CClassA
{
public:
CClassC2() : CClassA(2) {}
};
/**
#################################################################
##
#################################################################
**/
class COwner
{
public:
COwner() : m_iTestVal(999) {}
public:
CClassC1 m_clData1;
CClassC2 m_clData2;
int m_iTestVal;
};
/**
#################################################################
##
#################################################################
**/
int main()
{
COwner clOwner;
CClassA *pC1 = &clOwner.m_clData1;
CClassA *pC2 = &clOwner.m_clData2;
COwner *pOnwer1 = (COwner *)((char *) pC1 - (size_t) &(((COwner *) nullptr)->*&COwner::m_clData1));
COwner *pOnwer2 = (COwner *)((char *) pC1 - (size_t) &(((COwner *) nullptr)->*&COwner::m_clData2));
std::cout << "pOnwer1->m_iTestVal = " << pOnwer1->m_iTestVal << "\n";
std::cout << "pOnwer2->m_iTestVal = " << pOnwer1->m_iTestVal << "\n";
}