簡體   English   中英

如何聲明一個僅對每個 class 實例的一個 class 方法可見的成員變量?

[英]How to declare a member variable that is only visible to one class method per class instance?

有沒有辦法聲明只對 Function1 可見並且不被所有實例共享的 member4?

class Test
{
  public:
    void Function1()
    {
        ???? int member4 //visble to Function1   (single instance)
    }
    void Function2()
    {
        static int member3;// visble to Function2  (all instances)
    }

  private:
    int member1; // visble to Function1 and Function2  (single instance)
    static int member2;//visble to Function1 and Function2 (all instances)

};

你的問題看起來像一個 XY 問題。 無論如何,這里有兩種可能的解決方案。

首先,您可以將該字段包裝成 class 並將該方法聲明為友元:

class Test {
public:
    // Don't forget to init Data:
    Test();

    void function1();
    void function2();

private:
    class Data;
    Data *data;
};

class Test::Data {
    int get() { return 42; }
    friend void Test::function1();
};

void Test::function1() {
    int secretData = data->get();
}

void Test::function2() {
    // Will not compile:
    // int secretData = data->get();
}

該溶液有氣味。 更好的辦法是將擁有這個秘密成員的實體提取到一個單獨的 class 中:

class AnotherEntity {
public:
    void function1() {
        // use secretData here;
    }

private:
    int secretData;
};

class Test : public AnotherEntity {
public:
    void function2();
private:
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM