有什么方法可以访问C ++复数类的私有成员变量?

时间:2018-09-05 10:09:22

标签: c++

我正在使用标准C ++库标头中的内置复数类std::complex。我在HLS工具中应用了代码。该工具无法访问该复杂类的私有成员变量。可以公开吗?我该怎么办?

Error: /usrf01/prog/mentor/2015-16/RHELx86/QUESTA-SV-AFV_10.4c-5/questasim/gcc-4.7.4-linux_x86_64/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.7.4/../../../../include/c++/4.7.4/complex(222): 
error: 'fpml::fixed_point<int, 16u, 15u> std::complex<fpml::fixed_point<int, 16u, 15u> >::_M_real' is private

2 个答案:

答案 0 :(得分:4)

std::complex模板有些神奇:您拥有明确的许可,可以将复数重新解释为两个标量的数组。一般来说,以下内容是有效的:

std::complex<float> a[10];

float* r = reinterpret_cast<float*>(a);

for (int i = 0; i != 20; ++i) std::cout << r[i] << '\n';

也就是说,您可以将复数数组视为实数两倍的数组。您可以使用这种方法分别访问复数的元素。

尽管要注意以下约束([complex.numbers] p2):

  

complexfloatdouble以外的任何类型实例化模板long double的效果是   未指定。

答案 1 :(得分:3)

仅此而已,访问成员的另一种方法是使用相应的getter,例如

#include <complex>

int main()
{
   std::complex<float> c;
   c.real(1);
   c.imag(2);
   return c.real();
}