gpt4 book ai didi

c++ - 如何基于函数参数C++更改对象属性

转载 作者:行者123 更新时间:2023-12-01 15:12:28 24 4
gpt4 key购买 nike

我有一个功能:

int bitCpy(Inst a, int b, int c, int d)
{
int range = d - c;
b <<= (32 - d);
b >>= (32 - range);
a.(PROPERTY HERE) = b; // a.num1, a.num2, a.num3 ... etc
return a;
}
该函数仅从整数的一个部分复制位,然后将这些位移到开头。 Inst是包含不同整数值的结构。我希望函数将 a(对象)设置为等于 b。但是,我希望它基于指定要设置的对象属性的参数起作用。这样做的原因是因为我希望行为根据所设置的属性而有所不同。
有什么办法吗?

最佳答案

您可以使用成员指针,例如:

int bitCpy(Inst &a, int Inst::*member, int b, int c, int d)
{
int range = d - c;
b <<= (32 - d);
b >>= (32 - range);
a.*member = b; // a.num1, a.num2, a.num3 ... etc
return a;
}
然后您可以这样称呼它:
Inst i;
bitCpy(i, &Inst::num1, ...);
bitCpy(i, &Inst::num2, ...);
...
Live Demo
但是,普通的 int*指针也将同样有效,例如:
int bitCpy(int *field, int b, int c, int d)
{
int range = d - c;
b <<= (32 - d);
b >>= (32 - range);
*field = b;
return a;
}
Inst i;
bitCpy(&(i.num1), ...);
bitCpy(&(i.num2), ...);
...
Live Demo
或者,一个 int&引用,例如:
int bitCpy(int &field, int b, int c, int d)
{
int range = d - c;
b <<= (32 - d);
b >>= (32 - range);
field = b;
return a;
}
Inst i;
bitCpy(i.num1, ...);
bitCpy(i.num2, ...);
...
Live Demo

关于c++ - 如何基于函数参数C++更改对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63238594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com