主功能

main(){

    foo x=1, y=1, z=1;

}


标头/类

class foo{

public:
    double a, b, c;
    double fn, val;

    // set a,b, and c
    void set(){
        a=1;
        b=1;
        c=1;
    }

    // constructor
    foo(double &f){
        set();

        // what I want to do here is say if "name of variable f" = "x", then do something
        // else if "name of variable f" = "y", do something else
        // else if "name of variable f" = "z", do something else
    }
};


正如您在主函数中看到的那样,x,y和z都具有相同的值。我试图编写一个处理这种情况的条件,并且提出了一种检查变量名称的方法。因为我总是要对名为“ x”的foo类的对象执行相同的操作,而对于“ y”等始终执行相同的操作,依此类推,无论这些值是什么。

最佳答案

您无法按照自己的要求去做,有两种方法可以做类似的事情。

您可以使用继承。

class foo{

public:
    double a, b, c;
    double fn, val;

    // set a,b, and c
    void set(){
        a=1;
        b=1;
        c=1;
    }

    // constructor
    foo(double &f){
        set();
    }
};

class X : public foo {
{
public:
    X (double &f) : foo(f) {
        // do stuff for x
    }
};

class Y : public foo {
{
public:
    Y (double &f) : foo(f) {
        // do stuff for y
    }
};

class Z : public foo {
{
public:
    Z (double &f) : foo(f) {
        // do stuff for z
    }
};

main(){

    X x=1;Y y=1;Z z=1;

}


或者您可以使用枚举

class foo{
public:
    enum Mode{
        Mode_X,
        Mode_Y,
        Mode_Z
    };
    Mode mode;

    double a, b, c;
    double fn, val;

    // set a,b, and c
    void set(){
        a=1;
        b=1;
        c=1;
    }

    foo(Mode m, double &f) : mode(m) {
        set();

        switch(mode) {
        case Mode_X:
            // what I want to do here is say if "name of variable f" = "x", then do something
            break;
        case Mode_Y:
            // else if "name of variable f" = "y", do something else
            break;

        case Mode_Z:
            // else if "name of variable f" = "z", do something else
            break;
        }
    }
};

main(){

    foo x(foo::Mode_X,1), y(foo::Mode_Y,1), z(foo::Mode_Z,1);

}


您可以将枚举版本与预处理器结合使用,以使变量声明更接近您的原始要求,如下所示:

#define X(value) x(foo::Mode_X,(value))
#define Y(value) y(foo::Mode_Y,(value))
#define Z(value) z(foo::Mode_Z,(value))

main(){
    foo X(1), Y(1), Z(1);
}


许多人,包括我自己在内,都建议不要使用这种预处理器。我只是说有可能。

关于c++ - 在C++中将变量名转换为字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13437034/

10-11 23:12
查看更多