ここに私の問題があります:
コード:
ファイル1.hpp:
namespace Output {
class Stringify{ // base class.....
protected:
size_t prec;
public:
std::stringstream out;
public:
Stringify(const size_t& _p = 5): prec(_p) {out.precision(prec);}
virtual ~Stringify(void){}
public:
std::string operator()(const XYZ& _v){
out.str("");
out << "{ " << _v.x() << ", " << _v.y() << ", " << _v.z() << " }";
return out.str();
}
std::string operator()(const XYZ& _v, const bool& _status){
out << "{ " << _v.x() << ", " << _v.y() << ", " << _v.z() << " }";
return out.str();
}
};
}
ここで、XYZ はベクトル オブジェクトです。
file2.hpp:
namespace NODE {
class Stringify: public Output::Stringify {
public:
Stringify2(const size_t& _p = 5): Output::Stringify(_p) {}
virtual ~Stringify2(void){}
public:
std::string operator()(const VERTEX& _obj){ return "What?";}
};
}
ここで、VERTEX は XYZ 型のメンバー値を持つ別のオブジェクトです。
main.cpp:
int main(int argc,char * argv[]){
XYZ v(1,2,3);
NODE::Stringify printer;
cout << printer(v) << endl;
return 0;
}
出力は次のとおりです。
必要な場合: {1,2,3}
コンパイルは問題ありませんが、私の知る限り、NODE::Stringify は {1,2,3} を出力できます。これは、彼の基本オブジェクトが XYZ 引数のメソッドを継承しているためです。バーテックス(なに?)基本クラスのメソッドを上書きしないため、仮想ワードは必要ありません。
情報として: Eigen 3.0 ライブラリ (typedef Eigen::vector3d XYZ) を使用して llvm-gcc-4.2 を使用して MAC OS 10.8 でコンパイルしています。
前もって感謝します。