
Fernando wrote:
What would I need to do in GTL? And, MORE importantly, what does GTL do, exactly, to adapt my "p" objet there?
Just typing off the top of my head. I am not yet allowed to copy and paste the code I wrote which Intel owns. typedef int Unit; struct MyPoint {int x, int y}; template <> class PointConceptMap<MyPoint> { public: static inline Unit PointGet(const MyPoint& t, Orientation2D orient) { return orient == HORIZONTAL ? t.x: t.y; } static inline void PointSet(MyPoint& t, Orientation2D orient, Unit value) { if(orient == HORIZONTAL) t.x = value; else t.y = value; } static inline MyPoint PointConstruct(Unit x, Unit y) { MyPoint tmp; tmp.x = x; tmp.y = y; return tmp; } private: PointConceptMap(); //construction disallowed } template <class T> class PointConcept : public T { public: static inline PointConcept& mimic(T& t) { return static_cast<PointConcept&>(t); } static inline const PointConcept& mimicConst(T& t) { return static_cast<const PointConcept&>(t); } inline T& yield() { return *this; } inline const T& yieldConst() { return *this; } inline PointConcept() {} template <class T2> inline PointConcept& operator=(PointConcept<T2>& that) { set(HORIZONTAL, that.get(HORIZONTAL); return set(VERTICAL, that.get(VERTICAL); } Unit get(Orientation2D orient) const { return get_(orient); } PointConcept& set(Orientation2D orient, Unit value) { set_(orient, value); return *this; } private: inline Unit get_(Orientation2D orient) const { return PointConceptMap<T>::PointGet(yieldConst(), orient); } inline void set_(Orientation2D orient, Unit value) { PointConceptMap<T>::PointSet(yield(), orient, value); } static inline T construct_(Unit x, Unit y) { return PointConceptMap<T>::PointConstruct(x, y); } }; template <class T> void foo(T& t) { PointConcept<T>& tref = PointConcept<T>::mimic(t); tref.set(HORIZONTAL, tref.get(VERTICAL); } That is the complete design pattern. It probably has syntax errors because I was typing off the top of my head, but you should get the idea quite clearly. Luke