是否可以使用C ++中的[]运算符访问复数的实部和虚部

时间:2014-04-07 17:38:24

标签: c++ std complex-numbers

我在C ++中使用<complex>库。是否可以使用[]运算符访问复数的实部和复数部分?我想使用myComplexNum[0]代替myComplexNum.real()myComplexNum[1]代替myComplexNum.imag()

我尝试使用MingW 4.5.2来做,我收到错误:no match found for 'operator[]'。我现在真的需要使用[]运算符,否则我将不得不更改数百行代码。

3 个答案:

答案 0 :(得分:3)

根据C ++ 11中的here

  

对于z类型的任何对象complex<T>reinterpret_cast<T(&)[2]>(z)[0]z的真实部分,reinterpret_cast<T(&)[2]>(z)[1]z的虚部

     

对于任何指向名为complex<T>的{​​{1}}数组元素和任何有效数组索引p的指针,i是复数reinterpret_cast<T*>(p)[2*i]的实部。 1}},p[i]是复数reinterpret_cast<T*>(p)[2*i + 1]

的虚部

您无法使用p[i]执行此操作,但如果您非常,则std::complex<T>可以reinterpret_cast或{{1}并使用T*

如果可能,我建议创建一个访问者函数:

T(&)[2]

然后根据需要使用operator[] template <class T> T & get(std::complex<T> & c, int index) { if(index == 0) return c.real(); else return c.imag(); }

答案 1 :(得分:2)

不。

你可以从std::complex<>派生并继承构造函数并添加一个被覆盖的operator[],但我会反对它。

答案 2 :(得分:1)

您必须在复杂的类中包装std :: complex:

class Complex {
   public:
   explicit Complex(std::complex& value) : m_value(value) {}
   ...
   operator std::complex& () { return m_value; }
   operator const  std::complex& () const { return m_value; }
   ...
   private:
   std::complex m_value;
}

这对于将涉及std :: complex的操作/函数的结果作为Complex进行获取是必要的。