Connecting Tech Pros Worldwide Forums | Help | Site Map

design question - way to specify what attribute of an object to process in a generic function

Alan
Guest
 
Posts: n/a
#1: Jun 16 '07
I was wondering if anyone had design advice on this. . . . I am
doing some mathematical operations looking at different metrics for
data (in objects) I have captured. The object class has several data
attributes, say: metric1, metric2, . . . metricN. These are different
metrics on which I am running statistics.

There are a number of operations I have to do on these objects for
each metric separately: sort, group (i.e., group a list of objects
based on a metric), etc. I understand the very basics of C++ template
functions, overloading, etc. However, I cannot figure out a way to
design a generic function to sort by each single attribute. So, I end
up with functions like: sort_by_metric1, sort_by_metric2, . . .
sort_by_metricN.

Is there a way to avoid so many nearly-duplicative functions? For
example, is there a way in the function call to tell the function what
metric I want to sort by? This would allow me to use one, generic
function vice a bunch of nearly-duplicative ones.

I hope this is clear. If not, please let me know, and I will
attempt to clarify.

Thanks, Alan


Gianni Mariani
Guest
 
Posts: n/a
#2: Jun 17 '07

re: design question - way to specify what attribute of an object to process in a generic function


Alan wrote:
....
Quote:
Is there a way to avoid so many nearly-duplicative functions?
You can use pointer to member as a parameter to your comparison function
for sorting.

Look up "pointer to member" in your fav C++ book - if you have further
questions, post again.

BTW - pointer to member may be a template parameter OR a value
parameter. It probably makes little difference.

Another wat is to code up different "getter" functions that get
different metrics and use those functions in your sort parameters.
Robert Bauck Hamar
Guest
 
Posts: n/a
#3: Jun 17 '07

re: design question - way to specify what attribute of an object to process in a generic function


Alan wrote:
Quote:
I was wondering if anyone had design advice on this. . . . I am
doing some mathematical operations looking at different metrics for
data (in objects) I have captured. The object class has several data
attributes, say: metric1, metric2, . . . metricN. These are different
metrics on which I am running statistics.
Something like

#include <vector>

struct object {
double metric1, metric2 ... metricN;
}

....
std::vector<objectdata;
.... insert objects into data.
Quote:
There are a number of operations I have to do on these objects for
each metric separately: sort, group (i.e., group a list of objects
based on a metric), etc. I understand the very basics of C++ template
functions, overloading, etc. However, I cannot figure out a way to
design a generic function to sort by each single attribute. So, I end
up with functions like: sort_by_metric1, sort_by_metric2, . . .
sort_by_metricN.
#include <algorithm>
#include <functional>

class less_metric1 : std::binary_function<object, object, bool>{
public:
return_type operator()(const object& a, const object& b) {
return a.metric1 < b.metric1;
}
}

....
std::sort(data.begin(), data.end(), less_metric1());
Quote:
Is there a way to avoid so many nearly-duplicative functions? For
example, is there a way in the function call to tell the function what
metric I want to sort by? This would allow me to use one, generic
function vice a bunch of nearly-duplicative ones.
This is the purpose of templates.

--
rbh
Alan
Guest
 
Posts: n/a
#4: Jun 17 '07

re: design question - way to specify what attribute of an object to process in a generic function


Thank you. This was very helpful. Alan

Alan
Guest
 
Posts: n/a
#5: Jun 18 '07

re: design question - way to specify what attribute of an object to process in a generic function


On Jun 16, 10:33 pm, Alan <jalantho...@verizon.netwrote:
Quote:
Thank you. This was very helpful. Alan
Robert,
I do not really understand what the line

return_type operator()(const object& a, const object& b)

does in your definition of the binary function. Can you explain?

I think I understand the rest now. Thank you for the suggestion.

Alan

Alan
Guest
 
Posts: n/a
#6: Jun 18 '07

re: design question - way to specify what attribute of an object to process in a generic function


Never mind. I found some information and discovered on another
thread that I should use "result_type."

Thanks again, Alan

Closed Thread


Similar C / C++ bytes