のようなタイプのものがあると聞きましたが、Objectメンバーを指しています。ここでは、Object :: *
class Point{float x, y;};
float Point::*p2 = &Point::x;
ですが、私は前に使用し、本当にあなたがそれのいずれかの経験を持っているit.Do使用する一部のボディを疑問に思うことがありますか?
今のようなタイプのものがあると聞きましたが、Objectメンバーを指しています。ここでは、Object :: *
class Point{float x, y;};
float Point::*p2 = &Point::x;
ですが、私は前に使用し、本当にあなたがそれのいずれかの経験を持っているit.Do使用する一部のボディを疑問に思うことがありますか?
今これは、コードを複製せずにメンバーに同じ処理を適用する場合に便利です。
vector<Point> points; // suppose it has many elements
vector<double> Project(const vector<Point> points, int Point::* coord)
{
vector<double> result;
for (auto& p: points)
result.push_back(p.*coord);
return result;
}
// usage:
vector<double> Xs = Project(points, &Point::x);
vector<double> Ys = Project(points, &Point::y);
高速代理人(link)などの他の多くの用途もあります。
興味深い..soは "for(auto&p:points)"コード –
@ user974349:これはGCC 4.5+とMSVC 11(ベータ版)で利用可能なC++ 11の機能です。 MSVC 10では 'std :: for_each(begin(points)、end(points)、[&result](const Point&p){result.push_back(p);}'を好むかもしれません。 –
class Point {
public: //public variables (can be accessed by outsider)
float x, y;
private: //private variables if you have any
};
あなたがPoint p
をするだろう、とあなたはちょうどあなたがstruct
オブジェクトの場合と同様に、p.x
とp.y
を行うことによって要素にアクセスできるオブジェクトを作成します。
あなたはクラスポインタを作成するには、Point *p
を行い、あなたがx, y
にアクセスしたい場合は、今、あなたがp->a
とp->b
を行うだろうしたい場合。別のオブジェクトPoint t
があり、t
のアドレスをp
に割り当てる場合は、p = &t
を実行できます。
私はあなたが質問のポイントを逃していると思います。これはメンバーへのアクセスであり、メンバーへのポインタではありません。 –
これらはpointers to class membersであり、さまざまなファンクタクラス(例:boost::function
またはstd::function
)を実装するために使用されます。
ブーストのようなライブラリを見てください::侵入 – PlasmaHH