在C ++中用类创建多个函数范围

时间:2014-08-08 09:09:01

标签: c++ scope

我需要具有相同名称的静态变量对属于同一类的特定函数可见。

我需要的是......

#include <XYZ.h>

{
  int A, B;
  void XYZ::f1(){}
  int XYZ::f2(){return 0;}
}

{
   int A, B;
   void XYZ::f3(){}
   float XYZ::f4(){return 0.0;}
}

{
   int A,B;
   void XYZ::f5(){}
   void XYZ::f6(){}
}

变量A和B应该在它自己的范围内,而不是其他任何地方。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

也许最好只为变量设置不同的名称。将它们“隐藏”在同一类的其他功能中没有多大优势。

class XYZ {
    static int A1, B1, A2, B2; // come up with more descriptive names
}

另一个好方法是将XYZ类拆分成几个较小的类。似乎它可能有不止一个责任,这是糟糕的设计。

如果你真的想要这个,这是怎么回事,但我觉得它太复杂了:

class Scope1 { // one for each scope, come up with more descriptive names
    static int A, B;
    static void f1();
    static int f2();

    // use friend declarations to allow access only from specified functions
    // but if you don't care about that, make the functions public instead
    friend void XYZ::f1();
    friend int XYZ::f2();

    // you don't want instances of this class
    public: 
        Scope1() = delete;
}

// delegate
void XYZ::f1(){
    Scope1::f1();
}
int XYZ::f2(){
    return Scope1::f2();
}

// implementation
void Scope1::f1(){}
// ...