C++ 中带有构造函数的模板化 typedef 结构

Templated typedef structs with constructor in C++

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

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);

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

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

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