[ create a new paste ] login | about

Link: http://codepad.org/vizevSF9    [ raw code | output | fork ]

C++, pasted on Feb 19:
#include <iostream>
#include <string>
#include <boost/lexical_cast.hpp>

using namespace std;
using namespace boost;

template <class DependingObjectT>
class has_dependency_pointer {
	template <class Derived>
	friend class get_depending_object;

	DependingObjectT *m_pDependingObject;
};

template<typename T>
struct identity {
	typedef T type;
};

template <class Derived>
class get_depending_object {
	public:
		template <class T>
		T &GetDependingObject() const
		{
			return *static_cast<T *>(static_cast<const Derived *>(this)->has_dependency_pointer<typename T::__base_t>::m_pDependingObject);
		}

		template <class T>
		void SetDependingObject(T *pObject)
		{
			static_cast<Derived *>(this)->has_dependency_pointer<typename T::__base_t>::m_pDependingObject = pObject;
		}
};


class Base1 {
	public:
		typedef Base1 __base_t;
		int N;
};
class Derived1 : public Base1 {
	public:
		int N2;
};

class Base2 {
	public:
		typedef Base2 __base_t;
		float F;
};
class Derived2 : public Base2 {
	public:
		float F2;
};


class A : public has_dependency_pointer<Base1>, public has_dependency_pointer<Base2>, public get_depending_object<A> {
};



int main()
{
	A a;
	Derived1 d;
	a.SetDependingObject(&d);

	cout << lexical_cast<string>(&a.GetDependingObject<Derived1>()) << endl;

	return 0;
}


Output:
1
0xbf7669ec


Create a new paste based on this one


Comments: