PDB ファイルから情報を抽出するために、オブジェクト PDBParser を作成しました。現在、>> および << 演算子をオーバーロードして、メインから使用できるようにしています。
inFile >> MyPDBParser;
outfile << MyPDBParser;
<< 演算子をすべて設定しましたが、>> 演算子を正しく動作させることができないようです。
PDBParser クラスの .h ファイルは、何が起こっているかをよりよく理解できるようにするためのものです。
#include <iostream>
#include <cstdlib>
#include "FloatArray.h"
#include "IntArray.h"
#include "Atom.h"
#include "AtomArray.h"
using namespace std;
class PDBParser
{
friend ostream& operator<<(ostream& _ostream, PDBParser &rhs);
friend istream& operator>>(istream& _istream, PDBParser &rhs);
public:
PDBParser();
PDBParser(string atom1, string atom2, int separation);
PDBParser(const PDBParser& orig);
virtual ~PDBParser();
void grabAtoms(ifstream &infile);
void findAtoms();
void setAtom1(string rhs);
void setAtom2(string rhs);
void setSeparation(int rhs);
string getAtom1();
string getAtom2();
int getSeparation();
private:
string atom1s;
string atom2s;
int separation;
AtomArray *atoms1;
AtomArray *atoms2;
AtomArray *matches1;
AtomArray *matches2;
FloatArray *x1;
FloatArray *y1;
FloatArray *z1;
FloatArray *x2;
FloatArray *y2;
FloatArray *z2;
IntArray *allsequence;
ifstream backupinfile;
void trim(string &rhs);
void incrementArrays(int newElements);
};
基本的に、>> 演算子に必要なのは、istream から infile を取得し、PDBParser オブジェクトのこのインスタンスに対して、grabAtoms(infile) および findAtoms() 関数を呼び出すことです。
これが私が今持っているものですが、うまくいきません。コメントされた行は、私が機能させようとしていたものであるため、ご容赦ください。機能させるためだけに backupinfile オブジェクトを PDBParser クラスに追加しようとしましたが、通常はこれがなく、使用されません。
istream & operator>>(istream & _istream, PDBParser &rhs)
{
// ifstream in;
// _istream >> rhs.grabAtoms(in) >> rhs.findAtoms();
_istream >> rhs.backupinfile;
rhs.grabAtoms(rhs.backupinfile);
rhs.findAtoms();
return _istream;
}
ここでの問題は、関数が ifstream オブジェクトを受け取る必要があり、istream オブジェクトからそれを取得する方法がわからないことです。
これが私の作業中の << オーバーロードです。
ostream & operator<<(ostream & _ostream, PDBParser &rhs)
{
for(int i=0; i < rhs.x1->getSize(); i++)
{
_ostream.precision(3);
_ostream << fixed;
_ostream << setprecision (3) << rhs.x1->get(i) << " ";
_ostream << setprecision (3) << rhs.y1->get(i) << " ";
_ostream << setprecision (3) << rhs.z1->get(i) << " ";
_ostream << setprecision (3) << rhs.x2->get(i) << " ";
_ostream << setprecision (3) << rhs.y2->get(i) << " ";
_ostream << setprecision (3) << rhs.z2->get(i) << endl;
}
return _ostream;
}
ありがとう