#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);
}
}
本文介绍了一个C++模板元编程示例,通过使用模板特化和成员指针来实现父类对象从子类对象的获取。示例中定义了`DampVelocity`类及一个演示命名空间,展示了如何通过成员偏移量定位到父类。

716

被折叠的 条评论
为什么被折叠?



