【发布时间】:2019-12-11 01:32:16
【问题描述】:
我需要在一个结构中隐藏一个单个字段,而不是多个:
struct MyType1
{
unsigned char Value;
}; //
struct MyType2
{
unsigned void* Value;
} ; //
struct MyType3
{
signed int;
} ; //
如果可能的话,我希望结构类型与原始类型变量具有相同的大小,但编译器将其视为新类型。
在代码的某些部分我想回退结构, 到简单的值。
还可以创建具有这种结构类型的数组,但是, 空间不大。
MyType1 MyArray[255];
我已经查过以前的答案,但是没有找到。
例子:
typedef
unsigned int /* rename as */ mydatetime;
// Define new type as
struct mydatetimetype
{
unsigned int /* field */ value;
} ;
假设我在同一个程序中有这些功能,但包含文件不同:
void SomeFunc ( unsigned int /* param */ anyparam );
void SomeFunc ( mydatetime /* param */ anyparam );
void SomeFunc ( mydatetimetype /* param */ anyparam );
我的编程编辑器或 I.D.E.混淆了前两个功能。
稍后,在代码的某些部分,我将使用带有整数运算的压缩类型,但我应该对其他使用这种类型的程序员隐藏。
请注意,我还想将此功能应用于其他类型,例如指针或字符。
而且,不需要“转发”或使用“不透明”结构。
单个字段结构如何被填充或打包?
我应该添加一个属性来打包或填充这个结构以获得更好的性能吗?
这个技巧已经有名字了吗?
【问题讨论】:
-
这完全取决于实现。您正在寻找的技术通常称为“强类型定义”。
-
为什么您需要“在结构中隐藏单个项目...”?您需要解决的实际问题是什么?
-
我只是好奇,为什么要将变量隐藏在
struct中? -
你为什么不尝试使用联合?
-
MSVC 是您的 IDE 吗?在最后一个示例中,您展示了两个具有相同签名的函数和一个 重载 的函数。
标签: c strong-typing