我可以删除联合成员中的复制构造函数吗? 编译C++中的位字段是依赖于实现的,如果不这样做,则它们可能不会按预期编译。不幸的是,在处理要求精确组织位字段的严格标准时(例如在设备之间传输数据时),这是不可取的。我尝试在联合中使用更精确的位字段结构: templ
我可以删除联合成员中的复制构造函数吗? <>编译C++中的位字段是依赖于实现的,如果不这样做,则它们可能不会按预期编译。不幸的是,在处理要求精确组织位字段的严格标准时(例如在设备之间传输数据时),这是不可取的。我尝试在联合中使用更精确的位字段结构:我可以删除联合成员中的复制构造函数吗? 编译C++中的位字段是依赖于实现的,如果不这样做,则它们可能不会按预期编译。不幸的是,在处理要求精确组织位字段的严格标准时(例如在设备之间传输数据时),这是不可取的。我尝试在联合中使用更精确的位字段结构: templ,c++,unions,c++03,C++,Unions,C++03,我可以删除联合成员中的复制构造函数吗? 编译C++中的位字段是依赖于实现的,如果不这样做,则它们可能不会按预期编译。不幸的是,在处理要求精确组织位字段的严格标准时(例如在设备之间传输数据时),这是不可取的。我尝试在联合中使用更精确的位字段结构: template< unsigned char BIT_COUNT , unsigned char OFFSET > struct Bitfield { protected: unsigned char data; /
template< unsigned char BIT_COUNT , unsigned char OFFSET >
struct Bitfield
{
protected:
unsigned char data;
// Get and Set Functions
public:
operator unsigned char () const
{
return ( data >> OFFSET ) & ( ( 1 < BIT_COUNT ) -1 );
}
Bitfield& operator = ( unsigned char value )
{
const unsigned char mask = ( ( 1 << BIT_COUNT ) - 1 ) << OFFSET;
data &= ~mask;
data |= ( value << OFFSET ) & mask;
return *this;
}
};
union Bitfield_Test
{
Bitfield< 8 , 0 > raw;
Bitfield< 4 , 0 > flagset_1;
Bitfield< 1 , 0 > flag_a;
Bitfield< 1 , 1 > flag_b;
Bitfield< 1 , 2 > flag_c;
Bitfield< 1 , 3 > flag_d;
Bitfield< 4 , 4 > flagset_2;
Bitfield< 1 , 4 > flag_w;
Bitfield< 1 , 5 > flag_x;
Bitfield< 1 , 6 > flag_y;
Bitfield< 1 , 7 > flag_z;
};
void Test()
{
Bitfield_Test test1;
test1.raw = 1 << 6;
test1.flag_a = 1;
Bitfield_Test test2;
test2.raw = 0;
test2.flag_a = test1.flag_a = 1;
}
template
结构位域
{
受保护的:
无符号字符数据;
//获取和设置函数
公众:
运算符unsigned char()常量
{
返回(数据>>偏移量)&(1<位计数)-1);
}
位字段和运算符=(无符号字符值)
{
常量无符号字符掩码=((1个标志);
位字段<1,1>标志b;
位域<1,2>标志_c;
位字段<1,3>标志\u d;
位字段<4,4>标志集_2;
位域<1,4>标志;
位字段<1,5>标志_x;
位字段<1,6>标志y;
位域<1,7>标志;
};
无效测试()
{
位域测试test1;
test1.raw=1阅读虽然这是一个有用的资源,但我一直在使用Visual Studio 2010,它似乎缺少您文章推荐的C++11功能。我想我可以指定,但我更喜欢将我的问题保持开放式,以便对其他人有所帮助。然后,用C++03或C++98标记您的问题,谢谢您的建议。请阅读我的文章It’这是一个有用的资源,我一直在使用Visual Studio 2010,它似乎缺少你的文章推荐的C++11功能。我想我可以指定,但我更喜欢保持我的问题开放,以便对其他人有所帮助。然后,用C++03或C++98标记你的问题谢谢你的建议。