2010-02-22 116 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*/);