我正在尝试使用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'声明为全局(例如,在标题中)。我在这里失去了轨道......
答案 0 :(得分:1)
除非位深度是编译时常量,否则您有两种选择:
1)使用运行时变量实现对象(可以使用模板而不是运行时多态来生成实现,但要使用它们,您必须type erase到虚拟接口或切换运行时位深度,按顺序从中选择。)
2)使所有调用函数将位深度作为模板参数,直到您执行上述运行时变量的某个级别 - &gt;特定的位深度模板映射(至少在main中你必须这样做)
是的,您可以拥有(常量)整数模板参数并对它们进行部分特化。
答案 1 :(得分:0)
我只是将数据声明为BYTE *。然后,提供一个包装类,允许根据位深度通过索引检索元素。拥有这样的类,您将能够在运行时更改位深度...
也许提供模板“at”函数就足够了,它接受索引并在BYTE数组中返回指定类型的元素。将涉及一些低级编程,但c ++确实很好用!