从C ++中的静态方法访问非静态类变量

时间:2014-12-19 05:18:44

标签: c++ static static-methods static-variables

静态函数的问题是它只接受静态类变量和函数。可以采用解决方法。

Class A{
int x;
static void function()
{
    A *a= new A();
    a->x; //this way we can access the non-static functions
    free(a);
    }
}

但我们假设这个案例在队列中。

Class A{
queue x;
static void function1()
{
    A *a= new A();
    a->x.push(some argument); //this way we can access the non-static functions
    free(a);
}

static void function2()
{
    A *a= new A();
    a->x.pop(); //this way we can access the non-static functions
    free(a);
}

}

每个function1和function2将创建一个自己实例的队列,即a,意味着队列x对于这两个函数都是不同的。

我们怎样才能让这两个函数同时访问同一个队列而不使它成为静态,有没有解决方法,请注意function1()和function2()并行运行在线程中。因此,function1()有点独立于function2(),反之亦然。

1 个答案:

答案 0 :(得分:1)

我认为你需要首先检查你的设计为什么需要这个。

顺便说一句,您可以将队列作为参数传递给函数。这将允许function1function2访问相同的队列。但是,由于它们并行,您可能需要锁定机制。 但是在调用function1 / function2之前必须创建队列,他们不应该释放它。

static void function1(A *a)
{
    a->x.push(some argument); //this way we can access the non-static functions
}

static void function2(A *a)
{
    a->x.pop(); //this way we can access the non-static functions
}

我也认为这种方式不是一种解决方法,而是一种干净的解决方案。