棋子层次结构设计:继承与类型字段

2024-04-30

我有一个片段的基类

 class piece;

和一个包含派生对象的数组

piece* board[8][8];

优点,通过虚拟函数进行简洁的设计。缺点是,如果我必须在板上找到一块或比较一块,我必须恢复到动态铸造(或 typeid)。它很丑陋,并且在发出数百万个请求时可能会消耗性能。

另一方面,如果我创建一个单件类的数组,它有一个用于识别件的类型字段,我就不会遇到这个问题(而且它应该更快),但我必须制作超级丑陋的 switch 语句。我想,由于部件的数量是有限的,而且我不认为自己会做那么多的开关,这最终可能是一个更好的选择,你觉得呢?

这是为了好玩(所以没有位板)。

阅读一些答案,我认为仅将类型字段用于运算符重载(==, !=, ...) 可以发挥这两个词的精华。

The boost::variant看起来也很有趣。


或者,如果您的类集有限 - 即您知道数量,请使用变体和访问者。例如,boost::variant<king, queen, bishop, knight ...>该板是由这种类型的二维阵列组成的。现在要进行询问,您可以使用访客...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

棋子层次结构设计:继承与类型字段 的相关文章

  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • Python 中的 @staticmethod 与 @classmethod

    方法和方法有什么区别装饰的 https peps python org pep 0318 with staticmethod http docs python org library functions html staticmethod和
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • Django:对子子外来对象的计数求和

    我有很多 Twavail 的热门歌曲 我有很多 Twavail 的 Twaffic 我想对 Twaffic 的点击数进行求和 并在 Twaffic 条目中获得一个附加字段 hits count 但我遇到了一些困难 这是我的模型 class
  • 如何根据 Postgres 中的过滤条件更新深度嵌套的 JSON 对象?

    我有一张桌子mapping transform带有 JSONB 列content json包含类似的东西 meta mapping src up dest down 我想添加一个新的 JSON 条目 rule names some name
  • 创建图像列表框?

    如何在 Winforms 应用程序上创建一个 ListBox 控件 该控件以有序的方式包含图像 就像它包含文本一样 I d like the images to appear like this 也许我什至不需要使用列表框 也许有更好的控制
  • HTTP 标头中使用的日期/时间格式

    哪个 RFC 描述了现代 HTTP 标头中用于日期 时间的格式 例如 Last Modified 和 If Modified Since 以及如何根据这种格式在 PHP 中生成日期 时间字符串 一些来源指向 RFC 2822 如DateTi
  • Excel 选择与激活

    VBA代码有什么区别wb Sheets 1 Cells Select and wb Sheets 1 Activate 选择允许一次选择多个对象 选定的对象放置在允许迭代的 Selection 对象中 选择一个对象 例如 一列 会激活该对象
  • WordPress 主题“错误:主题将自身定义为其父主题。请检查模板标头。”

    In my WordPress Website s Themes Area I am getting strange message ERROR The theme defines itself as its parent theme Pl
  • 为什么附加到窗口[编辑]

    我正在查看 qunit 的代码 我的问题是为什么你想通过属性将 qunit 对象附加到 window 对象 这是链接file http github com gutzofter qunit blob master qunit qunit j
  • Polymerfire 元素使应用程序崩溃

    我刚刚添加了新型聚合物火
  • 处理限制为 2 列的可变空间分隔文件

    无论出于何种原因 数据均以以下格式提供 0001 This is text for 0001 0002 This has spaces in between 0003 Yet this is only supposed to be two
  • 如何检查 Python 中的函数是否没有发送参数

    因此 在一个函数中 我想测试函数期望的参数是否存在 如果有参数 则执行此操作 如果没有从调用程序发送参数且函数中未接收到任何参数 则执行此操作 def do something calculate if calculate somethin
  • 为什么进度条不像文本那样动态变化?

    我在之后动态更新一些元素setTimeout 功能 jQuery 函数 text 似乎在处理时随着数组索引的每次变化而动态更新 但是引导进度条正在通过以下方式更改 css and attr 好像没有动态更新 这是我的页面 您可以看到文本发生
  • qmake 和 QT_INSTALL_PREFIX。如何为 Qt 库选择新位置?

    我是 qmake 的新手 我正在尝试构建一个现有的应用程序 Qt 最初安装在 usr local lib Qt 4 3 5 中 qmake query QT INSTALL PREFIX 返回该路径 我已将 Qt 库移动到另一个位置 生成的
  • 如何在 Tensorflow 中计算 Spearman 相关性

    Problem 我需要计算 Pearson 和 Spearman 相关性 并将其用作张量流中的指标 对于皮尔逊来说 这是微不足道的 tf contrib metrics streaming pearson correlation y pre
  • 已安装 JDBC,但尝试连接到 Oracle 时出错

    扩展库附带的示例程序工作得很好 但是当我尝试连接到 Oracle 时 出现以下错误 读取关系数据时出错 加载连接 ojdbc14 时出错 加载 JDBC 驱动程序类 oracle jdbc Driver OracleDriver 时出错 如
  • 如何使用AJAX显示数据?

    大家好 我在 ajax 中面临一个问题 我想将此数据显示为 html 中的表格 我如何提取此数据并以 html 表格形式显示它 它只是一个虚拟数据 否则它有很多对象加上嵌套对象帮我 JSON 数据 FullName shahrushabh
  • 求 a/b mod c

    我知道这可能看起来像一个数学问题 但我刚刚在比赛中看到这个问题 我真的很想知道如何解决它 We have 一个 模c and b 模c 我们正在寻找商的值 a b mod c 有任何想法吗 在整数环中模C 这些方程是等价的 A B mod
  • r-project SixSigma ss.rr 在 `row.names<-.data.frame`(`*tmp*`, value = value) 中给出错误:'row.names' 长度无效

    我有下面的数据框 gt str luc data frame 19 obs of 4 variables driver Factor w 16 levels nr 1 nr 10 1 9 10 11 12 13 14 15 16 2 pos
  • SQL Server、C#:事务回滚超时异常

    我有一个奇怪的问题 我有一个 NET 程序 我的处理逻辑需要在 SQL Server 2005 数据库上进行长时间运行的事务 约 20 分钟 没关系 因为没有人并行访问数据库 当出现问题时 事务应该回滚 很少发生并且没有任何可见的模式 th
  • Java hibernate 找不到布尔值验证器

    我有一个服务方法尝试添加一个对象store 冬眠的方法 get 方法适用于此 DAO 和服务类 而添加方法则不起作用 在控制台中没有错误 UrlWhiteListDaoImpl urlDao MapperFacade mapper Auto
  • 棋子层次结构设计:继承与类型字段

    我有一个片段的基类 class piece 和一个包含派生对象的数组 piece board 8 8 优点 通过虚拟函数进行简洁的设计 缺点是 如果我必须在板上找到一块或比较一块 我必须恢复到动态铸造 或 typeid 它很丑陋 并且在发出