2012-01-28 55 views
4

我心裏有這樣的結構:數字類型的C++非零默認值 - 重新創建?

template <typename T, T defaultValue> 
struct Numeric 
{ 
    Numeric(T t=defaultValue) : value(t) { } 
    T value; 
    T operator=()(T t); 
    operator T(); 
}; 

我可能會使用這樣的:

std::vector<Numeric<bool, true> > nothingButTheTruth; 

我的問題很簡單:這是一個很好的方法,如果是這樣,那麼像這樣存在於標準庫或Boost中?

+0

想要知道在不指定初始值設定項的情況下,最終會如何結束。例如,在一個向量中,你會說'v.resize(10,true)'。 – 2012-01-28 05:07:56

回答

2

我更常見的模式是參數化容器,而不是類型。

有很多缺點都在做它自己的方式:

  • 雖然你提供分配和轉換,你不能真正約束 一個bool&Numeric<bool, true>
  • A vector<bool>vector<Numeric<bool, true> >是不相關的 類型。

這很快就會變得很痛苦。我不會這樣做,但也許你有一個強大的用例。

+0

是的,的確如此。但是我的類型並不總是像這樣被包含,所以這可能是我的一個壞例子。 – paperjam 2012-01-28 01:16:39

+1

有趣的是,你使用'vector '作爲例子,因爲'vector '臭名昭着[實際上不是'bool'的'vector'](http://www.gotw.ca/gotw/050.htm) 。 – Spire 2012-01-30 07:50:46

+0

@Spire我只使用'bool',因爲OP做到了。但我承認,我從來不知道'矢量'是如此特別專業化(但我從未使用過'矢量')。另一個原因是相信新語言可以迅速獲得,但他們的標準庫,這是一個完全不同的水壺。 – smparkes 2012-01-30 18:24:21