いくつかの座標 (1,2) を持つ ShapeType の Point があり、オーバーロードされた演算子 () で apply_visitor を使用して座標 (3,4) を Point に追加したいので、Point は最終的に(4,6)。私の実装はどこで失敗していますか? 私の ShapeVisitor クラスは正しいと思いますが、「apply_visitor」は CLARK::Point のメンバーではありません。
コードは次のとおりです。
#include "Point_H.hpp"
#include "Shape_H.hpp"
#include "boost/variant.hpp"
typedef boost::variant<Point,Line,Circle> ShapeType;
ShapeType ShapeVariant(){...}
class ShapeVisitor : public boost::static_visitor<>
{
private:
double m_dx; // point x coord
double m_dy; // point y coord
public:
ShapeVisitor(double m_dx, double m_dy);
~ShapeVisitor();
// visit a point
void operator () (Point& p) const
{
p.X(p.X() + m_dx);
p.Y(p.Y() + m_dy);
}
};
int main()
{
using boost::variant;
ShapeType myShape = ShapeVariant(); // select a Point shape
Point myPoint(1,2);
boost::get<Point>(myShape) = myPoint; // assign the point to myShape
boost::apply_visitor(ShapeVisitor(3,4), myPoint); // trying to add (3,4) to myShape
cout << myPoint << endl;
return 0;
}
ありがとう!