#include <stdio.h>
struct rectangleBase
{
int width, height;
int posX, posY;
};
struct circleBase
{
int radius;
int posX, posY;
};
template<typename T>
class Object {
public:
Object() { }
~Object() { }
void movePos(int x, int y)
{
object.posX += x;
object.posY += y;
}
void setPos(int x, int y)
{
object.posX = x;
object.posY = y;
}
T& returnObject() { return object; }
private:
T object;
};
int main(int argc, char ** argv)
{
Object<rectangleBase> a;
Object<circleBase> b;
b.setPos(1,2);
printf("px: %d", b.returnObject().posX);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgpzdHJ1Y3QgcmVjdGFuZ2xlQmFzZQp7CiAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgIGludCBwb3NYLCBwb3NZOwp9OwoKc3RydWN0IGNpcmNsZUJhc2UKewogICAgaW50IHJhZGl1czsKICAgIGludCBwb3NYLCBwb3NZOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgT2JqZWN0IHsKcHVibGljOgoKICAgIE9iamVjdCgpIHsgfQogICAgfk9iamVjdCgpIHsgfQoKICAgIHZvaWQgbW92ZVBvcyhpbnQgeCwgaW50IHkpCiAgICB7CiAgICAJb2JqZWN0LnBvc1ggKz0geDsKICAgIAlvYmplY3QucG9zWSArPSB5OwogICAgfQoKICAgIHZvaWQgc2V0UG9zKGludCB4LCBpbnQgeSkKICAgIHsKICAgIAlvYmplY3QucG9zWCA9IHg7CiAgICAJb2JqZWN0LnBvc1kgPSB5OwogICAgfQoKICAgIFQmIHJldHVybk9iamVjdCgpIHsgcmV0dXJuIG9iamVjdDsgfQogICAgCnByaXZhdGU6CiAgICBUIG9iamVjdDsKfTsKCmludCBtYWluKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCnsKCU9iamVjdDxyZWN0YW5nbGVCYXNlPiBhOwoJT2JqZWN0PGNpcmNsZUJhc2U+IGI7CgliLnNldFBvcygxLDIpOwoJcHJpbnRmKCJweDogJWQiLCBiLnJldHVybk9iamVjdCgpLnBvc1gpOwp9CgoK