[C++][Boost]Nietypowa konstrukcja template'a
Ostatnio zmodyfikowano 2014-07-15 00:20
kampar Temat założony przez niniejszego użytkownika |
[C++][Boost]Nietypowa konstrukcja template'a » 2014-07-13 18:59:42 Witam, czy ktoś mógłby podzielić się wiedzą na temat takiej konstrukcji: Point VertexProperties::* w przykładzie: typedef boost::rectangle_topology <> Topology; typedef Topology::point_type Point;
struct VertexProperties { VertexProperties() { } boost::rectangle_topology <>::point_type point; Node * node; };
typedef boost::adjacency_list < boost::vecS, boost::vecS, boost::directedS, VertexProperties > Graph; typedef boost::property_map < Graph, Point VertexProperties::*>::type PositionMap; typedef boost::property_map < Graph, Node * VertexProperties::*>::type NodeMap;
Pierwszy raz się z czymś takim spotykam, mniej więcej domyślam się jak to działa, ale nie wiecie gdzie mogę o takiej składni więcej poczytać? |
|
Monika90 |
» 2014-07-13 20:30:05 Point VertexProperties::* jest to typ: wskaźnik do składowej typu Point należącej do klasy VertexProperties Powiedzmy że masz klasę, która ma składowe typu Point: struct VertexProperties { Point p1, p2, p3; };
To teraz możesz sobie zadeklarwoać zmienną: Point VertexProperties::* p;
i przypisać jej adres jednej ze składowych, np.: p = & VertexProperties::p2;
by wreszcie z użyciem tego wskaźnika odwołać się do składowej konkretnego obiektu: VertexProperties obj; obj.* p = Point( 3, 4 );
|
|
DejaVu |
» 2014-07-15 00:20:29 Aż musiałem sprawdzić co to jest :P #include <cstdio>
struct Punkt { int x; int y; Punkt() : x( 0 ) , y( 0 ) { } Punkt( int _x, int _y ) : x( _x ) , y( _y ) { } };
void wypisz( const char * _sOpis, const Punkt & _punkt ) { printf( "%s {%d,%d}\n", _sOpis, _punkt.x, _punkt.y ); }
struct Struktura { Punkt p1, p2, p3; };
int main() { Punkt Struktura::* wskaznik; wskaznik = & Struktura::p2; Struktura obiekt; obiekt.* wskaznik = Punkt( 3, 4 ); wypisz( "obiekt.*wskaznik", obiekt.* wskaznik ); wypisz( "obiekt.p2", obiekt.p2 ); ( obiekt.* wskaznik ).x = 5; wypisz( "obiekt.*wskaznik", obiekt.* wskaznik ); wypisz( "obiekt.p2", obiekt.p2 ); return 0; }
Standardowe wyjście programu: obiekt.*wskaznik {3,4} obiekt.p2 {3,4} obiekt.*wskaznik {5,4} obiekt.p2 {5,4}
|
|
« 1 » |