Connecting Tech Pros Worldwide Help | Site Map

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

 
LinkBack Thread Tools Search this Thread
  #1  
Old June 16th, 2007, 10:55 PM
Alan
Guest
 
Posts: n/a
Default design question - way to specify what attribute of an object to process in a generic function

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, 12:05 AM
Gianni Mariani
Guest
 
Posts: n/a
Default Re: design question - way to specify what attribute of an objectto 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, 12:15 AM
Robert Bauck Hamar
Guest
 
Posts: n/a
Default 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, 02:35 AM
Alan
Guest
 
Posts: n/a
Default 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, 01:45 PM
Alan
Guest
 
Posts: n/a
Default 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, 04:15 PM
Alan
Guest
 
Posts: n/a
Default 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

 

Bookmarks

Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

Popular Articles

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over 220,662 network members.