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_s
或 struct ResourceHeader_t
或只是一个普通的 struct ResourceHeader
之后,可以直接使用相同的符号,而无需显式 [=14] =].
我现在有这段代码,到目前为止它似乎可以工作,但我想知道是否有办法以更优雅的方式获得完全相同的结构,因为到目前为止我的方法每次都需要为每个结构重复...最终目标是拥有一个类型定义结构,该结构将根据字节顺序自动交换字节。
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_s
或 struct ResourceHeader_t
或只是一个普通的 struct ResourceHeader
之后,可以直接使用相同的符号,而无需显式 [=14] =].