我能避免在我的设计中传播这个模板吗?
Can I avoid propagating this template up in my design?
我已经学习/阅读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>
。
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 你能重载对象变量名本身返回的内容吗
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 试试完美的正方形,你能给点小费吗
- 为什么我的for循环不能正确获取argv
- 如何重构类层次结构以避免菱形问题
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 为什么我不能在 FOR LOOP 中使用 i/10,C++?
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 当不能使用auto和decltype()时,如何避免封闭类类型的重复
- ref是在复制编译器优化,我能避免它吗
- 我怎么能用这个OpenMP关键部分来避免这个原始指针呢
- 在双点算术中,尽量避免四舍五入,因为超过了双点,所以不能
- 当我在类中声明一个固定长度的向量时,我能避免歧义吗?
- 我能避免在我的设计中传播这个模板吗?
- 为什么我不能使用 std::unique_ptr 来避免循环依赖?
- 带有继承的部分专门化.我能避免继承吗?