2012-01-28 78 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