2012-01-28 19 views
4

私は心の中でこのような構造があります。数値型のC++のゼロ以外のデフォルト値 - reinvention?

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

私の質問は簡単です::これは良いアプローチですし、もしそうなら、このような何かをして、私はこのようにそれを使用する場合があります

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

を標準ライブラリやBoostに存在しますか?

+0

イニシャライザを指定するのが簡単ではない状況で、どうやって終了するのか分かりにくいです。例えば、ベクトルでは 'v.resize(10、true)'と言うでしょう。 –

答えて

2

より一般的に見られるパターンは、型ではなくコンテナをパラメータ化することです。

欠点の多くはそれをあなたの方法を行うことにあります。

  • あなたは割り当てと変換を提供しますが、あなたが実際にNumeric<bool, true>bool&をバインドすることはできません。
  • vector<bool>およびvector<Numeric<bool, true> >は、 タイプではありません。

これはかなり早くかなり痛いです。私はそれをしないだろうが、おそらくあなたは強力なユースケースを持っている。

+0

はい、本当です。しかし、私のタイプは常にこのように含まれているとは限らないので、おそらく私の悪い例です。 – paperjam

+1

面白いことに、 'ベクトル'を、例えば、 'ベクトル'という名前で[実際には 'bool'の'ベクトル 'ではありません](http://www.gotw.ca/gotw/050.htm) 。 – Spire

+0

@ Spire OPがしたので、私は 'ブール'しか使っていませんでした。しかし、私は、 'ベクトル'が非常に特殊化されていることを知りませんでした(しかし、私は決して 'ベクトル'も使用しませんでした)。新しい言語がすばやく拾い上げられる標準的なライブラリであると信じる別の理由は、それはまったく異なる魚の釜です。 – smparkes

関連する問題