VC ++ 2008中的模板数组

时间:2009-09-14 23:48:06

标签: c++ templates

我正在尝试使用VC ++打开包含一些数字的原始数据文件。 数字可能是8/16/24位。对于给定的文件,我对此有先验知识。

我可以使用C ++模板创建数组变量来存储从文件中读取的数字吗?这段伪代码就行了:

if(BitDepth==8)
{
    CTemplate<unsigned byte> data; // data type should be unsigned byte
    Read8Bit(data);
    //.. various ops to read 8 bit data
}

if(BitDepth==16)
{
    CTemplate<unsigned short> data; // data type should be unsigned short
    Read16Bit(data);
    //.. various ops to read 16 bit data
}

if(BitDepth==24)
{
    CTemplate<unsigned int> data; // data type should be unsigned int
    Read24Bit(data);
    //.. various ops to read 24 bit data
}

//Later use 'data' out of scope of if() conditionals

当然,模板变量'data'必须在if()条件的范围之外使用。所以我需要将'data'声明为全局(例如,在标题中)。我在这里失去了轨道......

2 个答案:

答案 0 :(得分:1)

除非位深度是编译时常量,否则您有两种选择:

1)使用运行时变量实现对象(可以使用模板而不是运行时多态来生成实现,但要使用它们,您必须type erase到虚拟接口或切换运行时位深度,按顺序从中选择。)

2)使所有调用函数将位深度作为模板参数,直到您执行上述运行时变量的某个级别 - &gt;特定的位深度模板映射(至少在main中你必须这样做)

是的,您可以拥有(常量)整数模板参数并对它们进行部分特化。

答案 1 :(得分:0)

我只是将数据声明为BYTE *。然后,提供一个包装类,允许根据位深度通过索引检索元素。拥有这样的类,您将能够在运行时更改位深度...

也许提供模板“at”函数就足够了,它接受索引并在BYTE数组中返回指定类型的元素。将涉及一些低级编程,但c ++确实很好用!