2010-03-25 57 views
0

可能为重载操作符获取调用者图形吗?重载操作符在Visual Studio 2005中的调用者图形

我有一个简单的结构与自然顺序,我已经通过重载关系运算符来表示。回顾代码,看起来我在定义operator >时犯了一个错误。我已经设置大于仅仅返回operator <的否定(这是不正确的,因为这将意味着当val1 == val2(val1 > val2) == true)。

无论如何,在解决这个问题之前,我想检查代码的其余部分调用>运算符的位置,以确保没有意外的后果。这似乎不可能使用Visual Studio 2005呼叫浏览器。当我搜索这个函数时,它会识别它在代码中被定义的位置,但是列出那里没有对该函数的调用,而不是这种情况。

除了在我的项目代码中搜索“>”的所有实例,我还有其他选择吗?

此页 - http://msdn.microsoft.com/en-us/magazine/cc163658.aspx#S3 - 表示检测操作符调用不是最初在VS2005中,但我不知道这是否发生了变化。

回答

2
  1. 除非其类的VAL1和val2是自己实现operator>有基类的情况下,我建议你从页眉和cpp文件删除您的operator>定义和重新编译。这应该给你一个编译器保证的所有operator>调用的列表。

  2. Boost.Operators可能有助于避免将来出现此类错误。如果您提供operator==,它可以自动提供operator!=,例如,如果您提供operator<,则,operator>operator>=也相同。

  3. 这是非常难找到,由于模板的所有调用代码重载运营商和预编译:C++ IDE for Linux with smart reference searching

+1

回答得好,它不仅提供对特定问题的解决方案(找到所有实例),但是就如何避免首先解决这个问题的次要问题给出了建议,并最终链接到了关于该主题的一些背景信息。 使用这些模板,它看起来像是一种语言超越工具的例子,并且最终将贯穿始终。另一方面,预编译器... – 2010-03-26 11:06:38

+0

在''头文件中,存在关系运算符的模板运算符(请参阅http://www.cplusplus.com/reference/std/utility/rel_ops/),它们与2)提升运营商。 – 2010-04-20 11:27:40