【问题标题】:How to accept both modifiable and non-modifiable arguments?如何接受可修改和不可修改的参数?
【发布时间】:2019-12-01 19:20:05
【问题描述】:

我有一个调试宏,我给它一个浮点引用,并期望它有时会修改该变量,如果可以的话。

#define probe(x) implProbe(#x##GETLINE, (x))

void implProbe(const char * loc, float & x){
    // this signature is a place holder
    ...
    x = 4.f;
}

但是,我也想对临时变量或文字使用相同的宏,例如 probe(1 + 2) 或 probe(x + y)。在这些情况下,宏不需要具有相同的效果,我不希望看到它的输出,我只希望它不会中断。

float var = 0.f;
probe(var);
// var == 4.f

var = 0.f;
probe(var + 2.f);  // this should be legal
// var == 0.f (didn't change)

probe(1.f); // this should be legal

有没有办法做到这一点?

【问题讨论】:

  • 用 float&& 重载 impmProbe 怎么样?

标签: c++ reference pass-by-reference


【解决方案1】:

实现两个重载函数。

void implProbe(const char * loc, float & x){
    ...
    x = 4.f;
}
void implProbe(const char * loc, const float & x){
    ...
}

【讨论】:

    猜你喜欢
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多