模板初始化中的C ++

时间:2010-02-22 20:42:00

标签: c++ templates

给出以下代码:

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类型时仍然有效的代码。

...谢谢

3 个答案:

答案 0 :(得分:4)

我看到有四种可能性:

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

我更喜欢最后一个。它简洁,与其他部分具有相同的效果。

你可能担心如果类型改变这不起作用,或者其他什么。问题是,size_type按照惯例是无符号整数。只要size_type是一个合理的&amp; {0},0总是有效的。正确的尺寸测量类型。

答案 1 :(得分:1)

鉴于你的模板说它的unsigned int出现了

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

如果你是因为日后出现类型的原因而这样做的话,那么,我个人而言,我肯定会采用构造方法(即前者)。

答案 2 :(得分:0)

第一种情况看起来很漂亮。 你可以做更多的事情:

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