Dzieki :)
Ja rozwiazalem to w ten sposob:
//------------------------------------------------------------------------------
// szablon dla jednoargumentowych manipulatorow
template <class TYPE>
class manip_one_arg {
public:
manip_one_arg(TYPE _p) {
parameter = new TYPE(_p);
}
~manip_one_arg() {
delete parameter;
}
TYPE* parameter;
};
//------------
// szablon dla dwuargumentowych manipulatorow
template <class TYPE>
class manip_two_arg {
public:
manip_two_arg(TYPE _p1, TYPE _p2) {
parameter = new TYPE[2];
parameter[0] = _p1;
parameter[1] = _p2;
}
~manip_two_arg() {
delete[] parameter;
}
TYPE* parameter;
};
//------------
// konstrukcja ramek
enum part {
top_left, top_right,
h_line, v_line,
bot_left, bot_right,
cross,
cross_left, cross_right,
top_cross, bot_cross
};
//------------
// tryby
enum mode {
sing,
doub
};
manip_two_arg<int> set_xy(int _x, int _y) {
return manip_two_arg<int>(_x, _y);
}
class paintbox: public box {
protected:
COLORS color;
char** part_tab;
mode act_mode;
unsigned draw_posx, draw_posy;
public:
paintbox(int, int, int, int, mode);
~paintbox();
inline paintbox& operator<<(part _p);
paintbox& operator<<(mode _m){
act_mode = _m;
return *this;
}
paintbox& operator<<(manip_two_arg<int> manip) {
if(manip.parameter[0] > 0 && manip.parameter[0] < width)
x = manip.parameter[0];
if(manip.parameter[1] > 0 && manip.parameter[1] < height)
y = manip.parameter[1];
return *this;
}
};
paintbox& paintbox::operator<<(part _p) {
if(++draw_posx < width)
scr[draw_posx][draw_posy] = part_tab[act_mode][_p];
else if(++draw_posy < height)
scr[draw_posx=x][draw_posy] = part_tab[act_mode][_p];
return *this;
}
Oczywiscie bazujac na twoim pomysle :d