BOOST_CHECK 无法编译自定义类型的运算符 <<

2023-11-25

我写了这个非常简单的类,以便清楚我的问题是什么:

class A
{
public:
    int x;
    A(int y) {x=y;}
    bool operator==(const A &other) const {return x==other.x;}
};

现在,如果我定义 A first(1) 和 A secondary(1),那么 BOOST_CHECK_EQUAL(first, secondary) 应该通过,这对我来说似乎很自然。然而,当我尝试这样做时,我遇到了 50 个错误,第一个听起来像: no math for operator


我已经确定了三种解决问题的方法operator<<.

第一种方法是提供一个operator<<适合您的类型。这是需要的,因为当boost_check_equal失败,它还通过调用记录失败operator<<与物体。请参阅休息后的详细附录,了解这是如何实际完成的。这比看起来更难。

第二种方法是不进行我刚才提到的日志记录。你可以通过以下方式做到这一点#definineing BOOST_TEST_DONT_PRINT_LOG_VALUE。要仅禁用一个测试的日志记录,您可以使用以下命令包围有问题的测试#define,然后立即#undef it:

#define BOOST_TEST_DONT_PRINT_LOG_VALUE
BOOST_CHECK_EQUAL (first, second);
#undef BOOST_TEST_DONT_PRINT_LOG_VALUE

第三种方法是回避对operator<<它适用于您的类型,不将一项与另一项进行比较,而只是检查一个布尔值:

BOOST_CHECK (first == second);

选择您喜欢的方法。


我的偏好是第一个,但实施起来却极具挑战性。如果你简单地定义一个operator<<在全球范围内,它不会起作用。我认为这是因为名称解析的问题。解决此问题的一个流行建议是将operator<< in the std命名空间。这至少在某些编译器的实践中是有效的,但我不喜欢它,因为标准禁止向std命名空间。

我发现更好的方法是实现自定义print_log_value针对您的类型的类模板专门化。print_log_value是 Boost.Test 内部用来实际调用正确的类模板operator<<对于指定的类型。它委托给一个operator<<做繁重的工作。专精print_log_value对于您的自定义类型,Boost 正式支持[需要引用],并由此完成。

假设你的类型被称为Timestamp(它在我的代码中),首先定义一个全局自由operator<< for Timestamp:

static inline std::ostream& operator<< (std::ostream& os, const Mdi::Timestamp& ts)
{
    os << "Timestamp";
    return os;
}   

...然后提供print_log_value专门化,委托给operator<<你刚刚定义了:

namespace boost { namespace test_tools {
template<>           
struct print_log_value<Mdi::Timestamp > {
void operator()( std::ostream& os,
    Mdi::Timestamp const& ts)
{
    ::operator<<(os,ts);
}
};                                                          
}}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BOOST_CHECK 无法编译自定义类型的运算符 << 的相关文章

  • C 中的变量定义是什么意思[重复]

    这个问题在这里已经有答案了 你们能告诉我 这在 C 中意味着什么吗 define Privileged Data Privileged Data static int dVariable 编译器对变量进行寻址有特殊意义吗 这只是一个宏Pri
  • SetWindowsHookEx 函数返回 NULL

    我正在研究 DLL 注入 但收到错误如下 挂接进程失败 87 参数不正确 目标进程和dll都是64位的 注入代码为 BOOL HookInjection TCHAR target TCHAR dll name https msdn micr
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • C# 中的协变和逆变

    首先我要说的是 我是一名正在学习 C 编程的 Java 开发人员 因此 我会将我所知道的与我正在学习的进行比较 我已经使用 C 泛型几个小时了 我已经能够在 C 中重现我在 Java 中知道的相同内容 除了几个使用协变和逆变的示例 我正在读
  • 关闭 XDOCUMENT 的实例

    我收到这个错误 该进程无法访问文件 C test Person xml 因为它是 被另一个进程使用 IOException 未处理 保存文件内容后如何关闭 xml 文件的实例 using System using System Collec
  • C# 中处理 SQL 死锁的模式?

    我正在用 C 编写一个访问 SQL Server 2005 数据库的应用程序 该应用程序是数据库密集型的 即使我尝试优化所有访问 设置适当的索引等 我预计迟早会遇到死锁 我知道为什么会发生数据库死锁 但我怀疑我能否在某个时候发布不发生死锁的
  • 为什么WCF中不允许方法重载?

    假设这是一个ServiceContract ServiceContract public interface MyService OperationContract int Sum int x int y OperationContract
  • 如何将字符串转换为 Indian Money 格式?

    我正在尝试将字符串转换为印度货币格式 例如如果输入为 1234567 则输出应为 12 34 567 我编写了以下代码 但它没有给出预期的输出 CultureInfo hindi new CultureInfo hi IN string t
  • realloc():重新分配为 char * 上的 strcat 腾出空间时下一个大小无效 [重复]

    这个问题在这里已经有答案了 我在以下代码中收到无效内存错误 printf s n FINE 5 printf s LENGTH IS d n FINE 6 strlen buffer char realloc buffer strlen b
  • 无法通过 LINQ to Entities 使用某些功能?

    我正在尝试使用 LINQ 查询在项目上实现搜索功能 由于数据有时包含带有重音符号和其他符号的字符 因此我创建了一种方法来删除这些字符以进行搜索 这是我的代码 var addresses from a in db Addresses join
  • 理解 C++11 中的 std::atomic::compare_exchange_weak()

    bool compare exchange weak T expected T val compare exchange weak 是 C 11 中提供的比较交换原语之一 它是weak即使对象的值等于 它也会返回 falseexpected
  • 展开路径中具有环境变量的文件名

    最好的扩张方式是什么 MyPath filename txt to home user filename txt or MyPath filename txt to c Documents and settings user filenam
  • 在 SQL Server 上执行分页的最佳方式是什么?

    我有一个数据库超过200万记录 我需要执行分页以在我的 Web 应用程序上显示 该应用程序每页必须有 10 条记录DataGrid 我已经尝试使用ROW NUMBER 但是这种方式会选择所有 200 万条记录 然后只得到 10 条记录 我也
  • 是否有任何不使用公共虚拟方法的正当理由? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 是否有任何不使用公共虚拟方法的正当理由 我在某处读到我们应该避免使用公共虚拟方法 但我想向专家确认这是否是有效的声明 对于良好且稳定的 API
  • 为什么 C# 接口名称前面加上“I”

    这种命名约定背后的基本原理是什么 我没有看到任何好处 额外的前缀只会污染 API 我的想法与康拉德一致response https stackoverflow com a 222502 9898与此相关的question https sta
  • 如何强制执行特定的 UserControl 设计

    我正在编写一个基本用户控件 它将由一堆其他用户控件继承 我需要对所有这些后代控件强制执行某种设计 例如 顶部必须有几个按钮以及一个或两个标签 后代用户控件区域的其余部分可以自由放置任何内容 最初 我认为我可以将一个面板放到 Base Use
  • 如何使用 ASP.NET Web 表单从代码隐藏中访问更新面板内的文本框、标签

    我在更新面板中定义了一些控件 它们绑定到中继器控件 我需要根据匿名字段隐藏和显示用户名和国家 地区 但问题是我无法以编程方式访问更新面板中定义的控件 我如何访问这些控件 我也在网上查找但找不到很多参考资料 下面是来自aspx页面和 cs页面
  • 将文本从文本文件添加到 PDF 文件[重复]

    这个问题在这里已经有答案了 这是我的代码 using FileStream msReport new FileStream pdfPath FileMode Create step 1 using Document pdfDoc new D
  • 使用剪贴板 SetText 换行

    如何使用 SetText 方法添加换行符 I tried Clipboard SetText eee n xxxx 但当我将剪贴板数据粘贴到记事本中时 它没有给我预期的结果 预期结果 eee xxxx 我怎样才能做到这一点 Windows
  • 如何确定给定方法可以抛出哪些异常?

    我的问题和这个真的一样 找出 C 中方法可能抛出的异常 https stackoverflow com questions 264747 finding out what exceptions a method might throw in

随机推荐

  • sendmail 错误 452 这一小时收到的收件人太多

    我们正在向我们的 BREW 设备 在 sprint 网络中 发送大量电子邮件 一段时间后 我们的邮件服务器将消息排队并卡住了 当我们尝试刷新它们时 我们会从服务器获得关注 这个问题有解决办法吗 这个错误 452 是来自我们的邮件服务器还是
  • 查找DBUpdateException的原因

    打电话时DbContext SaveChanges 我得到一个 DbUpdateException 未处理的类型异常 System Data Entity Infrastruct DbUpdateException 发生在 实体框架 dll
  • 如何在 Python 中使用 Selenium 创建新的(持久的)Firefox 配置文件?

    尝试使用 Selenium 添加新的 持久的 Firefox 配置文件 AFAIK 执行时FirefoxProfile 使用临时文件生成新的配置文件 理想情况下 该配置文件应该能够对后续进程保持可用 即使创建者关闭后也是如此 Problem
  • 新的 iOS 7.1 mini-ui 视口设置是否存在错误?

    iOS 7 1 中新的 最小 ui 设置非常适合横向网站 我的网络应用程序使用全屏 绝对定位的 div 来显示其内容 以赋予其类似应用程序的感觉 但 Safari 似乎只是在底部添加了 URL 栏的高度 我在不同的 iPhone 上都试过了
  • Slim 3 自动装载机

    我是 slim 框架的新手 不知道如何使用自动加载器来自动加载我的类 我创建了一个app models myclass php但当然 当我尝试使用它时 我发现找不到课程 我不确定哪种是自动加载类的正确方法 或者我应该使用的命名约定 我应该通
  • Spring Boot 2.2.2.RELEASE 中集成测试隔离失败(每次 SpringBootTest 后删除表时出错)

    我们的应用程序正在 2 0 4 版本中运行 升级到 2 2 2 RELEASE 后 我们看到集成测试失败 我怀疑存在一些配置错误 并且每个集成测试本身都不会清理 或者存在以前不存在的额外初始化 我真的不知道如何正确修复它 再具体一点 每个测
  • 如何通过 REST 查询 SQL Server 来获取 XML

    我们一直在使用 Web 应用程序框架来构建需要能够查询 SQL Server 数据库并获取 XML 形式的结果的应用程序 过去 框架提供了这种能力 但该功能现已被弃用 所以我们在想 该框架允许我们轻松地通过 HTTP 查询 REST 服务
  • 禁用 xampp 将 http 重定向到 https

    我在 localhost 中的 xampp 上为 wordpress 创建了 VirtualHost 并在 httpd vhosts conf 中添加了以下代码
  • 在 Linux 上用 python 监听全局组合键

    我刚刚写了一个小程序 每隔几分钟从 flickr 下载一张新壁纸 现在我想添加 喜欢 壁纸的功能 因此它会比不喜欢或不喜欢的壁纸更频繁地出现 我想为此函数分配一个全局键盘快捷键 例如 如果我按 ctrl 7 它将在 Python 中执行某种
  • Tensorflow尝试使用未初始化的值AUC/AUC/auc/false_positives

    我正在训练用于图像分类的 CNN 由于我的数据集大小有限 我正在使用迁移学习 基本上 我使用的是谷歌在其重新训练示例中证明的预训练网络 https www tensorflow org tutorials image retraining
  • Git重置=致命:无法读取树

    有人在错误的分支上提交了所以我尝试将提交移动到另一个分支 当我尝试回滚提交时 出现以下错误 user server gitrepo git reset hard 9c2de3c0 fatal unable to read tree 9c2d
  • 如何在使用 Android API Level 15 的同时保持向后兼容性?

    冰淇淋三明治引入了很多新的UI设计元素 但市场渗透率仍然只有4 左右 如果您想使其应用程序面向未来 并利用 Honeycomb Ice Cream Sandwich 引入的一些设计元素 例如操作栏 配色方案等 那么确保您保持一定程度的落后的
  • Highgui 和 ruby

    我需要编写一个简单的项目 我正在使用 opencv ruby 和 mac 我通过brew安装了opencv 通过gem install安装了rb webcam coding utf 8 require opencv require rb w
  • .htaccess 用于 SEO 机器人在没有 hashbang 的情况下抓取单页应用程序

    Using a pushState启用页面 通常您使用重定向 SEO 机器人escaped fragment习俗 您可以阅读更多相关内容here 该约定假设您将使用 hashbang 前缀位于单页应用程序上所有 URI 之前 SEO 机器人
  • 按 R 中的因素过滤数据框

    我有以下数据框 sp lt combn c sp1 sp2 sp3 sp4 2 d lt data frame t sp freq sample 0 100 6 和两个因素 x1 lt as factor c sp1 sp2 x2 lt a
  • 如何在 C# 中创建包含多种尺寸/图像的图标文件

    如何创建包含多种尺寸的图标文件 我知道我使用位图创建了一个图标Icon FromHandle 但如何向该图标添加另一个图像 尺寸 Edit 我需要在我的应用程序中执行此操作 因此我无法执行外部应用程序来进行组合 我正在寻找一种将 png 文
  • CSS中按属性选择元素

    是否可以通过 HTML5 数据属性来选择 CSS 中的元素 例如 data role 如果你的意思是使用属性选择器 当然 为什么不呢 data role page Styles 有多种属性选择器可用于各种场景 我链接到的文档中均涵盖了这些选
  • 插入约 5000 行时,核心数据 sqlite-wal 文件变得巨大(>7GB)

    我正在将数据导入 Core Data 并发现保存操作很慢 使用 iOS 模拟器 我观察 sqlite wal 文件不断增长 直到其大小超过 7GB 我正在导入大约 5000 条记录 其中包含大约 10 个字段 这并不是很多数据 我插入的每个
  • 合并不重叠的数组块

    我使用此函数将 512x512 二维数组划分为 2x2 块 skimage util view as blocks arr in block shape array 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  • BOOST_CHECK 无法编译自定义类型的运算符 <<

    我写了这个非常简单的类 以便清楚我的问题是什么 class A public int x A int y x y bool operator const A other const return x other x 现在 如果我定义 A f