配列の実部だけ、虚部だけへのアクセスを頻繁に切り替えて行うアプリケーションがあり、
実部・虚部だけへのアクセスを連続的に行いたく、SoA(Structure of Array)形式のComplex Vector型を作成したいです。
コード的には:
c++
1class Complex_vector{ 2public: 3 double real*; 4 double imag*; 5}
というのを作ろうと考えています(実装中につき書いてるコードがコンパイル通らなかったらすみません。
このクラスとstd::complexとの組み合わせを考えたとき、
以下のような要素をとってくる演算:
c++
1int main(){ 2 class Complex_vector vec(10); // これはclassでallocate関数を定義済 3 std::complex<double> a = vec[3] 4}
については、以下のようにoperator[]で定義できると思います。。
c++
1std::complex<double> operator[](int N) { 2 std::complex<double> ret; 3 ret.real=this.real[N]; 4 ret.imag=this.imag[N]; 5 }
ここで問題になるのが、以下のような要素に代入する演算
c++
1class Complex_vector vec(10); 2std::complex<double> a = 1; 3vec[3] = a;
こうなった場合、[] operatorではあくまでstd::complexの返り値が返ってくるだけなので、実際にvecの値は書き換わりません。
(やりたいのはreal[3]とimag[3]にa.realとa.imagを代入)
なんとかこういった操作を定義する方法はないでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/29 01:12
2019/04/29 03:39
2019/04/29 22:57