簡體   English   中英

如何確定指針轉換將被偏移的編譯時間

[英]How can I determine compile-time that a pointer cast will be offsetted

有幾種方法可以在運行時檢測到這一點,但我找不到一種方法來確定在編譯時是否會偏移指向類的指針。

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!!!" );
// **********************************************************************************

編譯器顯然有這些信息,但我找不到可以幫助我的type_trait。

你的袖子上有什么騙局嗎?

我發現了幾個關於同一問題的問題。 這不是我想要的,我不能使用這些解決方案,但經過大量的研究,我認為不可能完成我想要做的事情,因為每個類的第一個成員在模板庫級別是未知的。

看到:

如何做一個靜態斷言指針轉換是微不足道的?

C ++,靜態檢測具有不同地址的基類?

static_assert(offsetof(MyC, m_memberI) == offsetof(MyA, m_memberI));
static_assert(offsetof(MyC, m_memberD) != offsetof(MyB, m_memberD));

不幸的是,這對我的特殊問題毫無用處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM