how to avoid this duplicate code using templates in C++ -
i eliminate duplicity of code in problem:
class populationmember { public: vector<int> x_; vector<int> y_; } class population { vector<populationmember*> members_; void docomputationforx_1(); // uses attribute x_ of members_ void docomputationforx_2(); void docomputationforx_3(); void docomputationfory_1(); // same docomputationforx_1, void docomputationfory_2(); // uses attribute y_ of members_ void docomputationfory_3(); edit: // there functions use members_ simultaniously double standarddeviationinx(); // computes standard deviation of x_'s double standarddeviationiny(); // computes standard deviation of y_'s }
the duplicity causing me have 6 methods instead of 3. pairwise similarity striking, can implementation of docomputationfory_1 out of docomputationforx_1 replacing "x_" "y_".
i thought remaking problem in way:
class populationmember { public: vector<vector<int>> data_; // data[0] == x_ , data[1] == y_ }
but becomes less clear way.
i know precompiler macro bad solution in general, not see other. subconciousness keeps suggesting templates, not see how can use them.
if want keep x_
, y_
separately in same class populationmember
it's better choose pass value solution rather template
solution:
define generic method as:
void docomputationfor (vector<int> (populationmember::*member_)); // pointer data ^^^^^^^^^^^^^^^^^^^^^^^^^^
call as:
docomputationfor(&populationmember::x_); docomputationfor(&populationmember::y_);
remember if docomputationfor
large enough then, imposing template
method make code duplication.
pointer member method, avoid code duplication little runtime penalty.
Comments
Post a Comment