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

标签 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(),反之亦然。

最佳答案

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

顺便说一句,您可以将队列作为参数传递给函数。这将允许 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
}

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

关于c++ - 从 C++ 中的静态方法访问非静态类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27560121/

相关文章:

c++ - 是否有粘性操纵器的官方资源

c++ - 模板推导失败,参数包后有参数

c - 如何创建要在两个 .c 源文件中使用的静态函数?

c++ - 为什么 QDir::rmdir 不是静态的?

java - Java 中的静态方法和接口(interface)

swift - 协议(protocol)方法是否意味着在 Swift 中被覆盖?

c# - C++ Windows 应用程序的 Visual Studio 替代品

c++ - CMake 和配置/模块 find_package

c++ - 如何通过 Code::Blocks 中的静态链接创建独立程序

C - (malloc、calloc 或静态)从函数返回的二维字符数组