У меня есть некоторые классы, которые наследуются друг от друга, но они делают это с помощью шаблонов. Я хочу получить указатель и / или ссылку на один из базовых классов, как если бы это был один из других возможных производных классов, зависящих от шаблонов
class a1
{
public:
int a;
virtual void func()
{
}
// other non virtual functions ...
};
class b1
{
public:
//no members or virtual functions
//other non virtual functions ...
};
class a2
{
public:
int a;
// ...
};
template < class T1 >
class derived : public T1,
public a2
{
int a;
// ...
};
Производный класс может наследоваться от класса a1 или класса b1, это в основном для экономии места в производном, поскольку b1 является пустым классом, и поэтому, когда производный экземпляр создается с параметром шаблона b1, он не несет дополнительной нагрузки на элементы данных и виртуальные функции a1.
Однако теперь я хочу получить указатель или ссылку от производного (a1), который действительно является указателем или ссылкой для производного типа (b1).
Что я действительно запрашиваю, так это справку о «хорошем» способе выполнения offsetof (), но используя наследование, где я могу получить offsetof () a2, я предполагаю, что это хороший указатель для производного (b1), потому что b1 - пустой класс.
Я попытался получить указатель на производный объект (a1), а затем добавить размер (a1) в надежде, что это будет правильная позиция, но хотел узнать, есть ли у кого-нибудь еще предложения о лучшем способе.