2010-02-22 158 views
0

考慮下面的代碼:C++模板初始化

template<typename T> 
class MyContainer 
{ 
    typedef T value_type; 
    typedef unsigned int size_type; 

    ... 
}; 

如何應該使用SIZE_TYPE(如循環索引)初始化變量?
它應該是:

for(size_type currentIndex = size_type(0);currentIndex < bound;++currentIndex) 

for(size_type currentIndex = static_cast<size_type>(0);currentIndex < bound;++currentIndex) 

的問題的基本原理是產生代碼時型基礎SIZE_TYPE更改或添加到模板參數仍然可以工作。

謝謝...

+0

增加了問題的基本原理。 – 2010-02-22 20:55:37

回答

4

有四種可能性,我看到:

size_type(); 
size_type(0); 
static_cast<size_type>(0); 
0; 

我寧願最後一個。它簡潔,並且與其餘部分具有相同的效果。

你可能擔心,如果類型改變這將無法正常工作。事情是,按照慣例,size_type是無符號整數。只要size_type是合理的尺寸測量類型&,0始終是一個有效值。

+0

這個接縫是合理的,但是如果我想在某些時候想要使用我自己的類型 - MyHugeIntegerType - 例如? – 2010-02-23 15:50:40

+0

@Bartłomiej:你打算製作一個沒有零點的形式不規則的整數類型嗎? – GManNickG 2010-02-23 19:08:49

+0

@GMan我不打算做一個不合格的整數類型,而是考慮使用一種不隱含允許從整型類型轉換的類型(即有一個明確的構造函數) – 2010-03-03 00:13:18

1

考慮到你的模板表示,其一個unsigned int什麼錯

for(size_type currentIndex = 0;currentIndex < bound;++currentIndex) 

如果你是因爲在以後的日期變化類型的原因,那麼,我個人肯定會採用構造方法(即前者)。

0

第一種情況看起來很漂亮。 更多你可以做以下事項:

for(size_type currentIndex = size_type(/*empty*/);