2017-04-25 56 views
0

我需要有arraydouble链接到某些对象中的成员变量。可以有多个对象,但链接到的成员变量始终为double将数组值链接到对象成员变量

例如:

Foo foo; 
foo.x = 3.2; 

Bar bar; 
bar.y = 1.1; 
bar.z = 2.0; 

double arrayValues[2] = {foo.x, bar.y}; 

现在,当我改变arrayValues值,我想容易地使对应的成员变量在foobar改变。我想arrayValues是任何长度,并从任何成员变量集合构造。

我正在考虑有第二个arraypointer,这将符合arrayValues。例如:

double* linkArray[2] = {&foo.x, &bar.y}; 

然后,每当我在arrayValues改变一个值,我在linkArray改变相应的值:

arrayValues[i] = 4.4; 
*linkArray[i] = arrayValues[i]; 

回答

0

我需要有双链路的阵列,以在一些成员变量对象。

你不能那样做。

最接近的是使用std::reference<double>的数组。

实施例:

#include <iostream> 
#include <functional> 

struct Foo { double x; }; 
struct Bar { double y; double z; }; 

int main() 
{ 
    Foo foo; 
    foo.x = 3.2; 

    Bar bar; 
    bar.y = 1.1; 
    bar.z = 2.0; 

    std::reference_wrapper<double> arrayValues[] = {{foo.x}, {bar.y}}; 
    arrayValues[0] *= 2; 
    std::cout << arrayValues[0] << std::endl; 
    std::cout << foo.x << std::endl; 
} 

输出

6.4 
6.4 
+0

我的意思是,我需要提供一个''array'和double'成员变量之间的链接。该数组是外部优化算法的输入,所以我无法更改其类型。 – murrdpirate