Connecting Tech Pros Worldwide Help | Site Map

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

  #1  
Old June 16th, 2007, 11:55 PM
Alan
Guest
 
Posts: n/a
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

  #2  
Old June 17th, 2007, 01:05 AM
Gianni Mariani
Guest
 
Posts: n/a

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.
  #3  
Old June 17th, 2007, 01:15 AM
Robert Bauck Hamar
Guest
 
Posts: n/a

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
  #4  
Old June 17th, 2007, 03:35 AM
Alan
Guest
 
Posts: n/a

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


Thank you. This was very helpful. Alan

  #5  
Old June 18th, 2007, 02:45 PM
Alan
Guest
 
Posts: n/a

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

  #6  
Old June 18th, 2007, 05:15 PM
Alan
Guest
 
Posts: n/a

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