使用不带参数的函数访问结构元素
Accessing structure elements using a function without arguments
我正在尝试创建一个应该包含一个字节的结构,并使访问它的位变得容易。目标代码应该与我的结构一起工作,如下所示:
data8_t data;
data = 7;
unsigned char temp_data = data;
cout << "6th bit value = " << data.toBits().b6 << endl;
data.toBits().b2 = 1;
然而,我不知道如何为包含以下内容的零件编码:
data.toBits().b6
data.toBits().b2
在调用一个不带参数的函数(该函数也属于结构(后,如何使用元素标识符?
包含位字段的变量被特别要求为一个字节长,我的data8_t结构目前看起来是这样的:
struct data8_t{
uint8_t data;
uint8_t b0;
uint8_t b1;
uint8_t b2;
uint8_t b3;
uint8_t b4;
uint8_t b5;
uint8_t b6;
uint8_t b7;
data8_t(){
b0=(data & 0x01)>>0;
b1=(data & 0x02)>>1;
b2=(data & 0x04)>>2;
b3=(data & 0x08)>>3;
b4=(data & 0x10)>>4;
b5=(data & 0x20)>>5;
b6=(data & 0x40)>>6;
b7=(data & 0x80)>>7;
}
template <typename T>
void operator=(T rhs){
data = (uint8_t) rhs;
b0=(data & 0x01)>>0;
b1=(data & 0x02)>>1;
b2=(data & 0x04)>>2;
b3=(data & 0x08)>>3;
b4=(data & 0x10)>>4;
b5=(data & 0x20)>>5;
b6=(data & 0x40)>>6;
b7=(data & 0x80)>>7;
}
operator unsigned char() const{
return (unsigned char) data;
}
};
它并不优雅,但它适用于:
data = 7;
unsigned char temp_data = data;
您应该尝试使用c++位字段,它应该完全按照您的意愿执行,并避免重复数据。你可以这样实现,例如:
struct data8_t
{
template <typename T>
void operator=(T rhs) {
data = (uint8_t)rhs;
}
union
{
uint8_t data;
struct {
uint8_t b0 : 1,
b1 : 1,
b2 : 1,
b3 : 1,
b4 : 1,
b5 : 1,
b6 : 1,
b7 : 1;
};
};
};
这样使用:
int main()
{
data8_t b;
for(int i = 0; i < 15; i++)
{
b = i;
std::cout << (uint32_t)b.b0 << (uint32_t)b.b1 << (uint32_t)b.b2 << (uint32_t)b.b3 << (uint32_t)b.b4 << (uint32_t)b.b5 << (uint32_t)b.b6 << (uint32_t)b.b7 << std::endl;
}
}
如果你真的想有一个功能来访问它,我想你可以这样做:
struct data8_t
{
struct bitfield
{
template <typename T>
void operator=(T rhs) {
data = (uint8_t)rhs;
}
operator unsigned char() const {
return (unsigned char)data;
}
union
{
uint8_t data;
struct
{
uint8_t b0 : 1,
b1 : 1,
b2 : 1,
b3 : 1,
b4 : 1,
b5 : 1,
b6 : 1,
b7 : 1;
};
};
};
template <typename T>
void operator=(T rhs) {
_data = (uint8_t)rhs;
}
operator unsigned char() const {
return (unsigned char)_data;
}
bitfield& toBits() { return _data; }
private:
bitfield _data;
};
编辑-使toBits与赋值运算符按位工作
相关文章:
- 使用不带参数的函数访问结构元素
- 删除目录函数访问被拒绝
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 如何使用 C++ 中的继承函数访问派生类中的局部变量
- 我想要一个具有子函数的函数访问相同的命名函数,而不使用它取决于其子类的类
- 有没有办法通过 main 函数访问受保护的矢量大小而无需将其转换为公共?
- 如何在C++通过公共函数访问私有函数成员?
- 限制variadic模板类中的构造函数访问
- 从析构函数访问模板类构造函数的参数,可以吗?
- 变量 z 无法从其他函数访问变量 x
- 从静态成员函数访问私有非静态类变量 - C++
- 如何在 C++ 中从 void 返回函数访问变量
- 在类中使用映射并通过其他类的 get() 和 set() 函数访问值
- 无法从另一个函数访问文件范围变量的内容
- 是否可以从 C++ 中的构造函数访问对象名称?
- 使用C 中的共享_ptr从公共静态成员函数访问私有构造函数
- 使用静态成员函数访问静态数据成员
- 为什么我们可以从 C++ 中的成员函数访问 non_member 函数
- 如何使用 c++ 中的函数访问全局变量?
- 如何从 C++ 中的主函数访问类中的私有构造函数?