簡體   English   中英

如何在 C++ 中聲明對成員 static 數組的成員引用

[英]How can I declare a member reference to a member static array in C++

我在 header 文件中設置了一些遺留代碼

class Foo
{
    static double Params[];
}

並且在源文件中聲明完成為

double Foo::Params[] = { 1, 2 };

然后稍后在各種 class 函數中,它被引用為

Params[0] = userValue;  // Change value in position 0.

現在我的任務是添加更多參數 arrays 以便我擁有

class Foo
{
    static double Params1[];
    static double Params2[];
}

double Foo::Params1[] = { 1, 2 };
double Foo::Params2[] = { 3, 4 };

我不想通過在代碼中的任何地方都這樣做來混淆源代碼

if (something) 
  Params1[0] = userValue;
else
 Params2[0] = userValue;

因此,我想聲明對數組的引用,並在設置“某物”時更改參數 arrays 之間的引用,以便我使用正確的參數來讀取/寫入。 我試過了

class Foo
{
    static double Params1[];
    static double Params2[];
    static double (&Params)[];
    double(&NonStaticParamsTest)[];
}

double Foo::Params1[] = { 1, 2 };
double Foo::Params2[] = { 3, 4 };
double Foo::Params[] = Foo::Params1;  // Won't compile

Foo::Foo()  // Constructor
    NonStaticParamsTest(Params1),   // Also won't compile

// I'd like to switch between Params by moving the reference like this
if (something)
    Params = Params1;
else
    Params = Params2;

我已經嘗試了對 static 和參考的非靜態嘗試的語法的各種更改,但我只是不完全在那里。

我已經查看了這個答案,但該示例不涉及類或 static 變量,因此即使嘗試使用自動變量,我也無法完全得到公認的答案。 聲明對 Ints 數組的引用時,為什么它必須是對 const 指針的引用?

我正在嘗試做的事情是可能的還是它不適用於 static arrays 和課程?

因此,我想聲明對數組的引用,並在設置“某物”時更改參數 arrays 之間的引用,以便我使用正確的參數來讀取/寫入。

一個引用一旦被初始化就不能被反彈,所以當Params是一個引用時這將不起作用:

if (something)
    Params = Params1;
else
    Params = Params2;

您需要一個指針,例如以下將起作用:

class Foo
{
public:
    static double Params1[];
    static double Params2[];
    static double (*StaticParams)[2];
    double (*NonStaticParams)[2];

    Foo();
    void doSomething();
};

double Foo::Params1[] = { 1, 2 };
double Foo::Params2[] = { 3, 4 };
double (*Foo::StaticParams)[2] = &Foo::Params1;

Foo::Foo()
    : NonStaticParams(&Params1)
{
}

...

if (something)
    Foo::StaticParams = &Foo::Params1;
else
    Foo::StaticParams = &Foo::Params2;

(*Foo::StaticParams)[0] = ...;
(*Foo::StaticParams)[1] = ...;

...

void Foo::doSomething()
{
    ...

    if (something)
        NonStaticParams = &Params1;
    else
        NonStaticParams = &Params2;

    (*NonStaticParams)[0] = ...;
    (*NonStaticParams)[1] = ...;

    ...
}

演示

暫無
暫無

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

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