Существует несколько способов обнаружить это во время выполнения, но я не могу найти способ определить, будет ли указатель на класс смещен во время компиляции.Как определить время компиляции, которое будет отбрасывать указатель стрелки
class MyA
{
public:
int m_memberI;
};
class MyB
{
public:
double m_memberD;
};
class MyC : public MyA, public MyB
{
};
void main()
{
MyC myC;
void* pVoidB = dynamic_cast< MyB* >(&myC);
if(pVoidB != &myC)
{
std::cout << "Offset needed!" << std::endl;
}
}
// **********************************************************************************
// Ideally, I would prefer something like this
//
// static_assert(std::cast_needs_offset< MyB*, MyC* >::value, "Offset detected!!!");
// **********************************************************************************
У компиляторов, очевидно, есть эта информация, но я не могу найти тип_трейта, который мог бы мне помочь.
Любой трюк с вашими рукавами?
Вместо того, чтобы мета-программирование шаблона, вы пробовали решение 'constexpr'? – John
Похоже на идею, я попробую это, как только я получу руку на компиляторе, который их поддерживает. спасибо –