說我有一束構件的結構:如何使用模板表示成員之間的約束?
struct foo {
int len;
bar *stuff;
};
作爲恰巧stuff
將指向bar
s表示是len
長的陣列。我想編碼在stuff
的類型。因此,像:
struct foo {
int len;
DependentLength<bar, &foo::len> stuff;
};
然後我可以實現DependentLength
表現得像一個指向柵陣列,但是,試圖尋找比foo::len
更大的索引時斷言。然而,我不能實現DependentLength<&foo::len>::operator[]
,因爲operator []只接受一個參數,即索引,並且它需要知道'foo'對象的位置以取消引用成員指針模板參數並執行斷言檢查。
但是,我碰巧知道DependentLength只會在這裏用作'foo'的成員。我真正想要做的是告訴DependentLength在哪裏找到相對於它自己的len ,而不是相對於foo指針。所以像DependentLength<(char*)&foo::stuff - (char*)&foo::len> stuff;
,但這不是合法的C++。邪惡的語言可以使這項工作成功嗎?
爲什麼不首先使用像'std :: vector'這樣的容器? – 2012-02-13 19:02:28
反轉關係:struct foo {std :: vector bar; int len()const {return bar.size(); }};' –
2012-02-13 19:07:59
我實際上是在一個打包結構的上下文中查看這個線索的,因此我不能只重新排列布局。 – 2012-02-13 21:13:37