【发布时间】:2014-12-23 04:47:52
【问题描述】:
在 C# 中,如果我定义了一个结构,我也可以重写 ToString()。然后,当我在调试并添加手表或将鼠标悬停在结构实例上时,工具提示将是计算出的 ToString() 而不是结构的类型名称。
我可以在 C++ 和/或 C++/CLI 中以某种方式做到这一点吗?也就是说,我可以将一个方法定义为结构的一部分(或做任何其他事情),这将导致监视值/工具提示显示我选择的字符串吗? Visual Studio for C/C++ 中的默认字符串呈现是所有结构字段值的列表(或尽可能多地塞入小盒子)。
我的类型都是 C 风格的结构。 (它实际上是在我将文件转换为 .cpp 并修复了一些类型问题之前用 C 编写的,因此我可以在 CLI 中运行它。)这是一个示例结构:
struct other_dollars_node
{
struct other_dollars_node *next_other_dollars;
override *overrides;
long other_dollars_id;
tm effective_date;
double amount;
}
我对 C++/CLI 的经验很少——我的大部分经验都是使用原生 C/C++ 和 C#。我正在使用 Visual Studio 2013。
更新:由于几乎所有现有代码都使用原生 C 语法,而且我更喜欢无需重构即可工作的解决方案,因此 CLI 方面可能不太重要。
【问题讨论】:
-
检查一下,看看它是否能说明问题stackoverflow.com/questions/5171739/tostring-override-in-c
-
请澄清一下,您的结构是普通的非托管结构(
struct foo)还是托管结构(public value struct foo或public value class foo)?也许向我们展示一个更简单的结构? -
你试过 NatVis 吗? msdn.microsoft.com/en-us/library/jj620914.aspx我知道这不是你要求的,但它可能是你需要的
-
@157:问题 5171739 的第二个答案看起来非常接近我想要的,除了它不影响工具提示中显示的内容,而且我不能调用 std::string(variableName)在监视窗口中,因为它说“标识符“std::string”是未定义的。所以它只对从代码中实际调用有用,这不是我要找的。span>
-
如果您使用的是 VS 2013,“托管 C++”不再是一个东西(仅在 VS 2005 中)。 C++/CLI 是正确的术语。
标签: c++ c visual-studio visual-c++ c++-cli