【问题标题】:Templated typedef structs with constructor in C++C++ 中带有构造函数的模板化 typedef 结构
【发布时间】:2020-09-13 15:11:23
【问题描述】:

我现在有这段代码,到目前为止它似乎可以工作,但我想知道是否有一种方法可以以更优雅的方式获得完全相同的结构,因为到目前为止我的方法每次都需要为每个结构复制一个副本。 . 最终目标是拥有一个类型定义的结构,它会根据字节序自动交换字节。

using ResourceHeader_t = struct ResourceHeader_s 
{
    uint32_t magic;
    uint32_t chunkVersion;
    uint32_t chunkSize;
};

template<bool bigEndian>
struct ResourceHeader : public ResourceHeader_s 
{
    ResourceHeader(ResourceHeader_t* ptr) : ResourceHeader_s(*ptr)
    {
        if (bigEndian)
        {
            LITTLE_BIG_SWAP(magic);
            LITTLE_BIG_SWAP(chunkVersion);
            LITTLE_BIG_SWAP(chunkSize);
        }
    }
};

使用示例:

ResourceHeader<true> resourceHeader((ResourceHeader_t *)fileBuffer);

【问题讨论】:

    标签: c++ c++11 templates struct using


    【解决方案1】:

    在 C++ 中不需要 typedef struct 声明。这是C的遗物。

    在 C++ 中,在声明 struct ResourceHeader_sstruct ResourceHeader_t 或只是一个普通的 struct ResourceHeader 之后,可以直接单独使用相同的符号,而无需显式的 struct

    【讨论】:

      【解决方案2】:

      您可以简单地将字节序添加为 ResourceHeader ctor 参数,而不是模板参数。这将删除结构的重复定义(一个是大的,一个不是)。

      【讨论】:

        猜你喜欢
        • 2016-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-04
        • 2011-05-24
        • 2010-12-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多