将对象数限制为1,可以使用点运算符访问静态成员

时间:2017-02-18 12:07:33

标签: c++ static

class Test{
public:
static int i;


};
int Test::i=0;

如果我制作测试t1,t2,t3的3个对象。这有可能实现只有t1可以使用点运算符访问我吗?

2 个答案:

答案 0 :(得分:0)

你不能超载点运算符,所以不,简单的回答是你无法做你想要的。你可以“隐藏”getter \ setter后面的字段并实现它们,这样就可以使用bool标志作为参数使类成为模板,然后进行专门化。

// This is NOT working example
template <bool _bFlag> class Test
{
protected:
static int i;
public:
    int geti() { return I;}
};

template <> class Test<true>
{
protected:
    static int i;
public:
    int geti() { return i;}
};

template <> class Test<false>
{
protected:
    static int i;
    int  geti() { return i;}  // inaccessible from outside
};

好的,这里有问题..不同的专业化将是不同的类,它们会有不同的静态成员。所以我们应该声明基类。

class TestBase
{
protected:
    static int i;
};

template <bool _bFlag> class Test : public TestBase
    {

    public:
       int geti() { return i;}
};

template <> class Test<true> : public TestBase
{
public:
    int geti() { return i;}
};

template <> class Test<false>  : public TestBase
{
protected:
    int geti() { return i;}  // inaccessible from outside
};


int main()
{
 Test<true> t1;
 Test<false> t2, t3;

 //int i = t2.geti(); // error 
}

这种绒毛是否真的花费了设计时间(以及作者的隐藏,当它被代码评论员删除时)?

答案 1 :(得分:0)

不,没有办法做到这一点。 var annot= Map.createAnnotation({ latitude: XXXXXXXXXXX, longitude: XXXXXXXXXX, title: 'myPlace', image: 'myPin.png', width:'100dp',// doesn't work height:'100dp'// doesn't work }); this.mapView.addAnnotation(annot); } 变量独立于对象而存在,当它是公共的时,每个人都可以访问它。

static

你真的想要实现什么?如果你想拥有一个只能由一个实例访问的成员变量,这很可能,但是使变量int x = Test::i; // <- no object of Test needed at all to access i 成为错误的方向。