c++ 根据函数参数值从struct中获取指定的数组值

fnatzsnv  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(152)

我有一个包含3个不同数组的结构体,例如

struct MyArrys
{
int arr1[3];
int arr2[3];
int arr3[3];
}

我需要根据步长值获取指定的数组,例如考虑以下函数:

int doSomething(int x,int y, MyArrs arrs, const int step, const int idx)
{
  int z = // get arr1, arr2, or arr3
  return x+y+z;
}

步长值仅为1、2和3,与阵列数量相似。
我尝试实现了一个名为getArrayValue的函数,它将根据步骤返回相应的数组值

int getArrayValue(const MyArrs& arrs, const int idx, const int step)
{
   switch(step)
   {
      case 0:
         return arrs.arr1[idx];
      case 1:
         return arrs.arr2[idx];
      case 2:
         return arrs.arr3[idx];
   }
} 

int doSomething(int x,int y, MyArrs arrs, const int step, const int idx)
{
  int z = getArrayValue(arrs,idx,step);
  return x+y+z;
}

这办法行得通。
有没有更好的方法来做到这一点?我可以在这里使用SFINAE吗?以及如何使用?它甚至值得使用SFINAE吗?

zy1mlcev

zy1mlcev1#

您可以使用指向成员的指针表。
示例:

int getArrayValue(const MyArrays& arrs, const int idx, const int step)
{
    using AnArray = int (MyArrays::*)[3];
    static const AnArray arrays[] = {&MyArrays::arr1, &MyArrays::arr2, &MyArrays::arr3};
    return (arrs.*arrays[step])[idx];
}

相关问题