我在C ++中使用<complex>
库。是否可以使用[]运算符访问复数的实部和复数部分?我想使用myComplexNum[0]
代替myComplexNum.real()
和myComplexNum[1]
代替myComplexNum.imag()
。
我尝试使用MingW 4.5.2来做,我收到错误:no match found for 'operator[]'
。我现在真的需要使用[]运算符,否则我将不得不更改数百行代码。
答案 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进行获取是必要的。