为不同的文件扩展名调用不同的函数
Posted
技术标签:
【中文标题】为不同的文件扩展名调用不同的函数【英文标题】:Invoke different functions for different file extensions 【发布时间】:2014-06-30 16:02:08 【问题描述】:情况如下:
我有一个用 C++ 编写的 Graph 类,我需要从 Files 构建 Graph 对象。问题是 Graph 以多种不同的方式存储在文件中,所以我正在考虑一个函数,使用文件扩展名,可以调用正确的过程来构建特定格式的 Graph。我应该如何进行?是我错了,还是我不能在课堂上重载 operator>>?提前致谢。
【问题讨论】:
看看这篇文章有没有帮助***.com/questions/51949/… 【参考方案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 在它的字符串算法中有一个实现。
【讨论】:
【参考方案2】:您如何确定数据的存储方式。如果只是
扩展,你只需要一张地图
std::string
→pointer_to_function。如果一样
扩展可以有几种不同的表示,
区分,例如,通过在前几个字节
文件或某些常见标题中的信息,您必须
在您阅读这些内容之前,最终选择不同
字节——同样,映射到指向函数的指针就可以了
诀窍。
根据要读取的格式的复杂程度,您可能需要 将指向阅读器函数的指针替换为指向的指针 一个工厂函数,它返回一个读取器类的实例, 来源于抽象读者。
【讨论】:
以上是关于为不同的文件扩展名调用不同的函数的主要内容,如果未能解决你的问题,请参考以下文章
视频转换后如何命名输出文件与输入文件相同但扩展名不同? [复制]
Robot Framework之扩展打开不同版本的谷歌浏览器