N
newbie
I want the DataAnDRelation is flexible in design so that client code
can define its own relationship according to their own needs.
I am trying to use function pointer, but that needs client code to
declare friendship in the class DataAndRelation, which I feel not
neat. Any design pattern/standard way to solve this problem.
bool MyRelation(double a, double b) {
return a > b;
}
bool MyRelationABS(double a, double b) {
return abs(a) > abs(b);
}
class DataAndRelation {
public:
DataAndRelation (double a, bool (*ptr )(double, double) ) { data =
a; ptr_relation = ptr; }
~DataAndRelation () {}
bool GreatOrEaqual (const DataAndRelation& other) const {
return (*ptr_relation) (this->data, other.data);
}
private:
double data;
bool (*ptr_relation )(double, double);
}
int main() {
DataAndRelation example(1.0, MyRelation);
DataAndRelation example2(2.0, MyRelationABS);
...
...
}
can define its own relationship according to their own needs.
I am trying to use function pointer, but that needs client code to
declare friendship in the class DataAndRelation, which I feel not
neat. Any design pattern/standard way to solve this problem.
bool MyRelation(double a, double b) {
return a > b;
}
bool MyRelationABS(double a, double b) {
return abs(a) > abs(b);
}
class DataAndRelation {
public:
DataAndRelation (double a, bool (*ptr )(double, double) ) { data =
a; ptr_relation = ptr; }
~DataAndRelation () {}
bool GreatOrEaqual (const DataAndRelation& other) const {
return (*ptr_relation) (this->data, other.data);
}
private:
double data;
bool (*ptr_relation )(double, double);
}
int main() {
DataAndRelation example(1.0, MyRelation);
DataAndRelation example2(2.0, MyRelationABS);
...
...
}