"bringiton bringiton"
I'm trying to define a MACRO that creates a shared_ptr and hides memory allocation. Here is what i have so far:
#define NEW0(T) boost::shared_ptr<T>(new T()); #define NEW1(T, p1) boost::shared_ptr<T>(new T(p1)); #define NEW2(T, p1, p2) boost::shared_ptr<T>(new T(p1, p2)); #define NEW3(T, p1, p2, p3) boost::shared_ptr<T>(new T(p1, p2, p3));
--------------------------------- Example of usage for the type Test:
class Test { public: Test() {;} Test(int p1) {;} Test(int p1, char p2) {;} Test(int p1, char p2, std::string p3) {;} };
boost::shared_ptr<Test> p0 = NEW0(Test); boost::shared_ptr<Test> p1 = NEW1(Test, 100); boost::shared_ptr<Test> p2 = NEW2(Test, 100, 'a'); boost::shared_ptr<Test> p3 = NEW3(Test, 100, 'a', "hello");
--------------------------------- Is there a better way to do this? I would prefer to use a function instead of a MACRO. But I don't think it is possible because it is not know how many paramaters are in T's constructor.
The basic intention is sound, but there are better ways to do it, that don't involve macros (for the user): http://article.gmane.org/gmane.comp.lib.boost.devel/140159 -- Dave Abrahams Boost Consulting www.boost-consulting.com