C++中子类获取父类的方法,模板实现

本文介绍了一个C++模板元编程示例,通过使用模板特化和成员指针来实现父类对象从子类对象的获取。示例中定义了`DampVelocity`类及一个演示命名空间,展示了如何通过成员偏移量定位到父类。
#pragma once
#include <stdio.h>
 
class DampVelocity
{
public:
DampVelocity();
~DampVelocity();
 
 
template <class TFather, class TChild, TChild TFather::*OFFSET>
static TFather& _GetFather(const TChild& kChild)
{
const TFather* const pStandardFather = 0;
const TChild* const pStandardChild = &((*pStandardFather).*OFFSET);
int pOffset = int(pStandardFather) - int(pStandardChild);
char* p = (char*)&kChild;
p += pOffset;
return *(TFather*)p;
}
 
};
 
namespace DampVelocity_Demo
{
class Child
{
public:
int m_iC;
};
 
class Fater
{
public:
int m_iF;
Child m_kC;
bool m_bF;
};
static void Test()
{
Fater fater;
fater.m_iF = 1;
fater.m_bF = true;
fater.m_kC.m_iC = 0;
 
printf("%d %d/n", &fater, &fater.m_kC);
Fater& kFater = DampVelocity::_GetFather<Fater, Child, &Fater::m_kC>(fater.m_kC);
printf("%d %d/n", &fater, &kFater);
}
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值