4
我想實現一個簡單的本地C++固定容量數組模板類,爲了方便起見,支持基於範圍的「for each」語法。在定製常量本機C++容器類上支持「for each」
我在支持常量實例時遇到問題。
使用這種實現:
template< class T, size_t Capacity >
class List
{
public:
List() { mSize = 0; }
const T* begin() const { return mItems; }
const T* end() const { return mItems + mSize; }
T* begin() { return mItems; }
T* end() { return mItems + mSize; }
private:
size_t mSize;
T mItems[ Capacity ];
};
這種用法:
const List< int, 5 > myInts;
for each(const int myInt in myInts)
{
continue;
}
我得到這個錯誤:
error C2440: 'initializing' : cannot convert from 'const int *' to 'int *'
Conversion loses qualifiers
這種用法不抱怨:
List< int, 5 > myInts;
for each(const int myInt in myInts)
{
continue;
}
這(不良)實現不抱怨:
template< class T, size_t Capacity >
class List
{
public:
List() { mSize = 0; }
T* begin() const { return const_cast< List* >(this)->mItems; }
T* end() const { return const_cast< List* >(this)->mItems + mSize; }
private:
size_t mSize;
T mItems[ Capacity ];
};
那是什麼,我不理解引擎蓋下回事?這是什麼關於std :: vector <>能夠正確處理這個問題?謝謝!
感謝您的時間Vlad。我沒有提到「爲每個」似乎是最近微軟編譯器特有的語法糖(我不關心可移植性)。如果VS2010支持你描述的C++ 11語法,我很樂意使用它 - 現在我不在開發機器上,但是我認爲(const int p:array)也可以工作?儘管如此,我很好奇爲什麼「對於每一個人」都不適合我,而且似乎也找不到任何可能爲我們提供一些亮點的好文檔。 – beau
@beau哦,我已經使用了它,看起來像VS 2005中引入的非標準微軟特定構造。由於我沒有使用多年的MS編譯器,所以我不能多說,但是VS 2010肯定支持標準基於C++ 11範圍,你可能不得不在項目設置中選擇它。對不起,我在這裏沒用,我試過了;) – 2012-12-10 05:43:26
+1在for'initial'初始化器中抓取array.end()。 –