修改if..else中的typedef声明

时间:2014-11-19 09:47:28

标签: c++ types binary

我想解决的问题:

读取二进制文件并将内容写入文本文件。二进制文件中的内容格式由用户使用选项指定,例如, bin2txt.exe [filename] [/f],其中/f表示二进制文件中的内容属于float类型。

我目前的算法:

声明:

typedef int datatype;

使用if...elseswitch...case将数据类型修改为主代码中的float,unsigned int short等。

问题:

数据类型在if...else内成功修改,但在if...else/switch...case之外切换回默认值(此处为int)。这意味着,我可以将二进制读取到向量,然后将向量写入if...else语句中的文本文件。但是这样,代码变得过于重复(每个if块都有一个向量声明,初始化,读入向量和写入文本文件。)。避免这种重复会更好。

有人可以指导我写作方向。 ?感谢。

1 个答案:

答案 0 :(得分:2)

如果您发现自己编写的代码除了涉及的类型外,它通常是模板的理想选择。

一个简单的(未经测试的)变体,没有错误检查或输入验证:

template<typename T>
void convert(std::istream& in, std::ostream& out)
{
    T data;
    while (in.get(reinterpret_cast<char*>(&data), sizeof(data)))
    {
        out << data << std::endl;
    }
}

int main(int argc, char* argv[])
{
    std::ifstream input(argv[1], std::ios::binary);
    std::ostream& output = std::cout;
    std::string format = argv[2];
    if (format == "/f")
    {
        convert<float>(input, output);
    }
    else
    {
        convert<int>(input, output);
    }
}