【发布时间】:2016-09-22 05:22:15
【问题描述】:
我已经学习/阅读 C++ 很长时间了,但我几乎没有写过任何东西。因此,尽管我对现代 C++ 实践了解很多,但我仍然没有很好的设计模式。
这是我的问题:假设我有一个类 Board,它代表一个游戏板(即国际象棋、围棋等)。该板的底层存储是std::array。
还有一个班级GameRunner拥有一个Board,负责运行游戏规则、记分等。
游戏板的大小由用户定义。在我的脑海中,GameRunner 被简单地声明为:GameRunner::GameRunner(unsigned size),然后size 参数同样被传递到声明为:Board::Board(unsigned size) 的 Board。
问题在于std::array 的大小必须是静态确定的。所以我不能有std::array 的成员变量,因为我在编译时不知道大小是多少。我以为我可以将std::unique_ptr 作为我的成员,然后将其指向一个动态创建的数组,但是当然您需要定义std::unique_ptr<std::array<???????>>,其中问号表示我显然不知道它的大小数组。
所以我的解决方案是让 Board 有一个模板来传递大小......所以GameRunner 会有一个Board<size>,但当然 GameRunner 也需要有一个模板,所以现在都是模板往下走……
那我在这里做什么?模板一直下降?即使大小不应该改变,也要使用可变大小的容器?我觉得我错过了一些非常微不足道的东西......
【问题讨论】:
-
你可以让板子有一个矢量大小......用无法测量的运行时速度差异换取简单的代码和更快的开发时间