我能避免在我的设计中传播这个模板吗?

Can I avoid propagating this template up in my design?

本文关键字:传播 能避免 我的      更新时间:2023-10-16

我已经学习/阅读c++很长时间了,但我几乎没有写过任何东西。因此,尽管我对现代c++实践了解得很多,但我仍然没有好的设计模式。

我的问题是:假设我有一个类Board,它代表一个游戏棋盘(如象棋、围棋等)。该板的底层存储是std::array

还有一个班GameRunner,有一个Board,负责执行游戏规则,记分等。

游戏板有一个由用户定义的大小。在我的脑海中,gamerrunner被简单地声明为:GameRunner::GameRunner(unsigned size),然后size参数同样被传递到被声明为:Board::Board(unsigned size)的Board。

问题是std::array必须有一个静态确定的大小。所以我不能有std::array的成员变量因为在编译时我不知道它的大小。我想我可以把std::unique_ptr作为我的成员,然后让它指向一个动态创建的数组,但是当然你需要定义std::unique_ptr<std::array<???????>>,其中的问号表示我显然不知道这个数组的大小。

所以我的解决方案是让董事会有一个模板来传递尺寸…所以GameRunner会有一个Board<size>,当然gamerrunner也需要有一个模板,所以现在一直都是模板。

我在这里做什么?所有的模板?使用可变大小的容器,即使大小不应该改变?

有人建议为这种情况在c++标准中添加一个容器——它的大小在构造时确定,之后永远不会改变。这篇文章被拒绝了,但如果你愿意的话,写一篇自己的文章是相当容易的。或者,只使用std::vector,并接受它具有您不需要或不关心的功能的事实(但它也不太可能引起问题)。

您应该使用std::vector<T>而不是std::array<T, N>