2010-07-16 22 views
1

我有一個像這樣定義就地vector類:我想autoexp.dat不解析union?

template<class T> 
class svectorbase 
{ 
    // ... 
protected: 
    union 
    { 
     char* m_char; 
     T* m_t; 
    } m_elems; 
    size_t m_maxsize; 
    int m_elemCount; 
}; 

template<class T, size_t maxsize> 
class svector : public svectorbase<T> 
{ 
protected: 
    char m_elems[sizeof(T) * maxsize]; // gets passed to base class 
}; 

(不要問他們爲什麼不只是創造一個T m_array[maxsize] ...嘆氣)

在VS2005中爲它創建一個autoexp.dat條目,因爲該結構使得在調試器中很難查看它。據我得爲:

svector<*>{ 
    preview 
    (
     #("size=",$e.m_elemCount,"/",$e.m_maxsize) 
    ) 
    children 
    (
     #array 
     (
      expr : ($c.m_elems.m_t)[$i], 
      size : $c.m_elemCount 
     ) 
    ) 
} 

...但在大小屬性正確地顯示出來,陣列填充(error):0條目。

我可能在做一些與工會有關的明顯事情,但看不到樹木的阿甘。有任何想法嗎?

回答

3

您的基類中有一個名爲m_elems的成員變量,另一個成員變量m_elems在派生類中。

$c.m_elems in $c.m_elems.m_t指的是派生類的char數組,而不是基類的聯合。

+0

啊!我真是個笨蛋。我改變了孩子班的名字,現在它就起作用了。我真的不想編輯這個wtf-y代碼,但是你去了。 – tenpn 2010-07-16 11:27:13

2

你可以試試明確鑄造到M_T T *:

children 
(
    #array 
    (
     expr : ((($T1*)($c.m_elems.m_t))[$i], 
     size : $c.m_elemCount 
    ) 
) 

我不是附近的dev的機器現在這麼這裏可能有語法錯誤 - 但希望它橫跨有想法。

+0

以前沒見過$ T1常數,真好。 – tenpn 2010-07-16 13:10:41