【问题标题】:Passing 3D array as parameter into function in C++14 the right way以正确的方式将 3D 数组作为参数传递给 C++14 中的函数
【发布时间】:2017-06-07 17:38:31
【问题描述】:

我需要一些帮助,我需要将 rijndael 圆键作为参数传递给函数。圆形键是一个 3D 数组,如下所示:

unsigned char rk[11][4][4];

现在我需要将它输入到一个函数中并对它进行一些二进制操作(所以参数应该是可编辑的)。我该如何以正确的方式做到这一点?我这样做的方法是将它放在一个结构中并将结构传递给函数。但它很丑。所以现在我的代码如下所示:

typedef struct{
  unsigned char rk[11][4][4];
}roundKey;

void addKey(roundKey* rk, ....)
{
  some_unsigned_char ^= rk->rk[foo][bar][i];
}

这很丑,我想以正确的方式做。我该怎么做?

【问题讨论】:

  • 离题:C++ 中不需要typedef struct { ... } roundKey; 技巧。普通的老 struct roundKey { ... }; 为你做事。
  • 谢谢@user4581301!是的,我编写了更多的 C 代码,而 C++ 对我来说相当新。

标签: c++ arrays function multidimensional-array parameters


【解决方案1】:

相反,我认为你正在以一种最好的方式来做这件事,我只是重新安排一下,让它成为一个成熟的课程。这样我们就可以轻松地传递它,添加一些不错的访问器方法来简化代码,或者尽最大努力从大部分代码中抽象出数组的 3D 特性。

class RoundKey {
 public:
  uint8_t rk[11][4][4];
  uint8_t& operator()(int x, int y, int z){
    return rk[x][y][z];
  }
};

void addKey(RoundKey &rk, ....){
  some_unsigned_char ^= rk(foo,bar,i);
}

(根据需要重新排列索引。)

鉴于类的简单性,编译器可能会将其编译为与传递完整 3D 数组所给出的非常相似(如果不相同)的东西。

【讨论】:

  • 谢谢!很高兴听到。不过我想我会按照自己的方式去做,因为我只需要将我的“丑陋”结构传递给几个函数。
  • @JussiHietanen:我相信一切都会好起来的。也就是说,邪恶总是从“几个功能”开始。防御性编码实践表明我们应该使用能够适应未知的未来需求和范围蔓延的设计。
猜你喜欢
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 2018-09-17
  • 2013-01-25
  • 1970-01-01
相关资源
最近更新 更多