为不同的文件扩展名调用不同的函数

时间:2014-06-30 16:02:08

标签: c++ data-structures

以下是这种情况:

我有一个用C ++编写的Graph类,我需要从Files构建Graph对象。问题是Graph以很多不同的方式存储在文件中,所以我在考虑一个函数,使用文件扩展名,可以调用以某种格式构建Graph的正确过程。我该怎么办?我错了还是我不能重载运算符>>在我班上?提前谢谢。

2 个答案:

答案 0 :(得分:1)

operator>>(应该)与它所提取的流的任何细节无关,因此使用此运算符可能是错误的机制。

最好的方法是:

graph_type load_from_file(const std::string& file_path) { //or use something like boost::filesystem::path

    std::ofstream file { file_path };

    if(endswith(file_path, ".graph") {
        return deserialize_from_graph(ofstream);
    }
    if(endswith(file_path, ".g2") {
        return deserialize_from_g2(ofstream);
    }
    //other formats here


    //else throw
}
注意,endswith不是来自标准库,但是boost有一个实现它的字符串算法。

答案 1 :(得分:0)

如何确定数据的记忆方式。如果只是 扩展,您只需要一张地图 std::string pointer_to_function 。如果相同 扩展可以有几种不同的表示形式, 例如,通过前几个字节来区分 文件或某些常见标题中的信息,您必须这样做 在您阅读这些内容之前,最终的选择是不同的 bytes-again,一个指向函数的指针的映射 诀窍。

根据要阅读的格式的复杂程度,您可能需要 用指针替换指向reader函数的指针 一个工厂函数,它返回一个读者类的实例, 它来自一个抽象的读者。