From: Brad H. <fea...@gm...> - 2010-08-30 09:00:01
|
I recently discovered how to use attribute.i and the %attribute directive to create attributes with customized behavior, as in the following (superfluous) example: %attribute(Point, int, x, getX, setX); %attribute(Point, int, y, getY, setY); class Point { public: int getX() { return _x }; void setX(int x) { _x = x }; int getY() { return _y }; void setY(int y) { _y = y }; private: int _x; int _y; } It works great for my purposes, except for one thing: I can't figure out how to make it work with template classes in a generic way. This is what I've tried: %attribute(Point<int>, int, x, getX, getY); // Acheives the desired effect, but only for Point<int> and not Point<double> etc. %attribute(Point<T>, int, x, getX, getY); // Compiles, but doesn't seem to have any useful effect on the generated module. %attribute(Point<T>, T, x, getX, getY); // Doesn't compile -- says "T" (in reference to the second T presumably) is not declared. template<typename T> %attribute(Point<T>, T, x, getX, getY); // Doesn't compile -- syntax error for "template<..." If possible, I would like to be able to create "template attributes," ie. attributes that get instantiations for every instantiation of the owning class template. Otherwise, I will have to write an %attribute line for every attribute of every instantiation of every class instantiation that I want to use them. I know it must show that I'm pretty new to SWIG. If the solution to this problem seems obvious to anyone, please don't hesitate to point it out to me anyway; I've been trying to figure out a way to achieve this effect for a long time and any help would be much appreciated. Thanks, - Brad Harms |