C++ 如何设计对可能包含不同类型的文件的访问权限?

C++ 如何设计对可能包含不同类型的文件的访问权限?,c++,types,C++,Types,我们这里有一种内部使用的文件类型,它基本上是一个表,列可以有不同的类型。还有一个带有标识的标题,标识哪列是哪种类型。用户通常不会一直生成表格布局,表格布局的集合相当有限(比如10个左右,但将来还会有更多) 我的问题是:在C++中如何对这个文件建模最好的方法是?< /强> 我可以想到以下可能性: 创建一个模板文件类,其中模板参数是包含列类型的结构。 在另一个静态模板类中,将头ID作为静态成员,并提供一个endianness安全读取函数(通过显式模板专门化) 缺点:需要为每个文件创建结构和静态伙伴

我们这里有一种内部使用的文件类型,它基本上是一个表,列可以有不同的类型。还有一个带有标识的标题,标识哪列是哪种类型。用户通常不会一直生成表格布局,表格布局的集合相当有限(比如10个左右,但将来还会有更多)

我的问题是:<强>在C++中如何对这个文件建模最好的方法是?< /强>

我可以想到以下可能性:

  • 创建一个模板文件类,其中模板参数是包含列类型的结构。 在另一个静态模板类中,将头ID作为静态成员,并提供一个endianness安全读取函数(通过显式模板专门化)

    缺点:需要为每个文件创建结构和静态伙伴类。如果静态模板类对此类型没有专门化,则将在链接时失败。这可能是对模板的滥用

  • 创建一个抽象数据类,为列中的每个类型派生显式重写,并动态地将从文件中获取的基类指针转换回正确的类型(我可以通过标题找到)

    缺点:每次读取时动态强制转换

  • 如上所述创建模板文件类要求模板具有读取和写入文件头的方法,并提供endianness安全读取

    缺点:需要为每种文件类型使用这些方法创建类,而不是像1中那样使用普通结构。对于内置类型,需要明确的模板专业化

  • 还有其他建议吗?

    选项:

  • 使用自描述性数据类型(“类型大小值”三元组),并对每个类型执行强制转换

  • 使用XML结构(基本上是上述结构的变体)

  • 使用相对数据库(例如,代码中嵌入的SQLite或其他任何内容)

  • 选项:

  • 使用自描述性数据类型(“类型大小值”三元组),并对每个类型执行强制转换

  • 使用XML结构(基本上是上述结构的变体)

  • 使用相对数据库(例如,代码中嵌入的SQLite或其他任何内容)


  • 因为文件是在运行时读取的,所以编译时解决方案不是真正的“解决方案”。 这是共享一个公共根的“多态类层次结构”的典型情况,其目的地是从
    唯一\u ptr
    共享\u ptr
    动态\u cast
    的集合

    基本上,您可以从数据格式猜出类型,然后
    push_back
    a
    x_ptr(新的实际类)

    基类
    可以帮助您识别所处理的
    实际类
    ,但这更说明了
    动态强制转换
    的作用。只需使用一个虚拟析构函数,让基类为空


    在文件上,每个记录都必须以一种“type_id”开头,它实际上告诉您以下数据所代表的实际类型。

    由于文件是在运行时读取的,所以编译时解决方案不是真正的“解决方案”。 这是共享一个公共根的“多态类层次结构”的典型情况,其目的地是从
    唯一\u ptr
    共享\u ptr
    动态\u cast
    的集合

    基本上,您可以从数据格式猜出类型,然后
    push_back
    a
    x_ptr(新的实际类)

    基类
    可以帮助您识别所处理的
    实际类
    ,但这更说明了
    动态强制转换
    的作用。只需使用一个虚拟析构函数,让基类为空


    在文件上,每个记录都必须以一种“type_id”开头,该id实际上告诉您以下数据所代表的实际类型。

    我应该补充一点,通常打开文件的人应该知道要接受哪种类型。否则,我们需要在案例1和案例3中编写一个包装器。我应该补充一点,通常打开文件的人应该知道接受哪种类型。否则,我们需要在案例1和案例3中编写包装器。