Вы можете использовать указатель на член , например:
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