你能在autoexp.dat预览中使用顺序#if块吗?

时间:2011-02-02 10:47:49

标签: c++ visual-studio visual-studio-2008 visual-c++ debugging

我有一个二次方程式结构,我想让它在visual studio 2008调试器中看起来更漂亮。这是结构:

struct QuadraticEquation
{
    float squareCoefficent; float linearCoefficent; float yIntersection; 
}

我希望它在调试器中显示为格式正确的公式:

3.0x^2 - 1.3x + 6.5

这是autoexp.dat预览脚本:

QuadraticEquation{
    preview
    (
        #if($c.squareCoefficent != 0.0f)
        (
            #($c.squareCoefficent, "x^2")
        )
        #if($c.linearCoefficent < 0.0f)
        (
            #(" - ", -$c.linearCoefficent, "x")            
        )
        #elif($c.linearCoefficent > 0.0f)
        (
            #(" + ", $c.linearCoefficent, "x")            
        )
        #if($c.yIntersection < 0.0f)
        (
            #(" - ", -$c.yIntersection)            
        )
        #elif($c.yIntersection > 0.0f)
        (
            #(" + ", $c.yIntersection)            
        )
    )
}

非常直接。但是当我运行代码时,我收到以下错误消息:

ERROR! Autoexp.dat:line(286) for 'QuadraticEquation': Failed to match ')' for preview/children rule

行号对应第二个#if分支,即#if($c.linearCoefficent < 0.0f)...

如果删除除square coefficent分支以外的所有内容,则不会出错。如果这意味着我不能拥有连续的#if块,我怎么能在这里做我想做的事情 - 而不是掉进一个dll?

1 个答案:

答案 0 :(得分:1)

我认为你必须使用嵌套的#if来实现这样的目标。检查默认std::complex<*>autoexp.dat的完成情况。

这需要进行大量打字才能涵盖所有可能的组合。你真的需要吗?也许只是将它显示为一个结构就足够实用了。