[英]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.