Re: templates - circular
On Mar 6, 7:09 pm, er <erwann.rog...@gmail.com> wrote:
On Mar 6, 6:19 pm, "Victor Bazarov" <v.Abaza...@comAcast.net> wrote:
er wrote:
Hi all,
1)
I have N=2 distinct pairs of objects {(x0,y0),(x1,y1)} related as
x0 -> y0
y0 -> {x1}
x1 -> y1
y1 -> {x0}
where -> represents, for example, has-a-ptr-to. Classes of objects
labeled x# and y# may have to support some operations (to safisfy
their left or right neighbors) but are of arbitrary type. So a class
for x# has to be like template<class Ty> class M_x{}, but also
template<class Tx> class M_y{},
which runs into a circular problem.
Any suggestion, please?
2) How about N>2? for example N=3,
x0 -> y0
y0 -> {x1,x2}
x1 -> y1
y1 -> {x0,x2}
x2 -> y2
y2 -> {x0,x1}
Is this homework? Even if it isn't, would you perhaps show us what
you already have?
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
What I already have is a specific configuration {(M_x_fc,M_y_fc),
(M_x_fc,M_y_fc)} (see below). What i'd like to able to do is have an
arbitrary configuration, so long as the required operations are
supported. For example, M_x_fc requires that r_type support mean(),
and M_y_fc requires that l_type support x(); Please ask if still not
clear.
class M_x_fc{
public:
void updat=
e(double);
double x()=
const;
typedef M_=
y_fc =
r_type;
typedef bo=
ost::shared_ptr<const r_type> ptr_const_=
r_type;
private:
ptr_const_=
r_type ptr_const_r;
double _x;=
};
void M_x_fc::update(double x_){
_x = x_;
};
double M_x_fc::mean()const{return ptr_cons=
t_r->mean();};
class M_y_fc{
public:
typedef M_=
x_fc l_ty=
pe;
typedef bo=
ost::shared_ptr<const l_type> ptr_const_l_type;
void set(p=
tr_const_l_type ptr_l_compl);
double mea=
n()const;
private:
double =
_rho;
double =
_mean;
ptr_const_=
l_type ptr_l_compl;
};
void M_y_fc::update(){
_mean = _rho*(ptr_l_comp=
l->x());
};
double M_y_fc::mean()const{return _mean;};=
class Config_fcfc{
public:
typedef M_=
x_fc =
l_fc_type;
typedef M_=
y_fc =
r_fc_type;
typedef bo=
ost::shared_ptr<l_fc_type> =
ptr_l_fc_type;
typedef bo=
ost::shared_ptr<r_fc_type> =
ptr_r_fc_type;
Config_fcf=
c(double rho);
ptr_r_fc_t=
ype ptr_r_fc_0;
ptr_r_fc_t=
ype ptr_r_fc_1;
ptr_l_fc_t=
ype ptr_l_fc_0;
ptr_l_fc_t=
ype ptr_l_fc_1;
};
Config_fcfc::Config_fcfc(double rho):
ptr_r_fc_0( new r_fc_type(=
0,rho)),
ptr_r_fc_1( new r_fc_type(=
1,rho)),
ptr_l_fc_0( new l_fc_type(=
ptr_r_fc_0)),
ptr_l_fc_1( new l_fc_type(=
ptr_r_fc_1))
{
ptr_r_fc_0->set(ptr_l_fc_1=
);
ptr_r_fc_1->set(ptr_l_fc_0=
);
};- Hide quoted text -
- Show quoted text -
ps: i'm aware that this problem can be solved by breaking dependencies
using inheritance but i'm interested in a fully generic solution.
knowing if that generic solution does not exist would already help.