design question - way to specify what attribute of an object to process in a generic function 
June 16th, 2007, 10:55 PM
| | | 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 | 
June 17th, 2007, 12:05 AM
| | | 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. | 
June 17th, 2007, 12:15 AM
| | | 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 | 
June 17th, 2007, 02:35 AM
| | | Re: design question - way to specify what attribute of an object to process in a generic function
Thank you. This was very helpful. Alan | 
June 18th, 2007, 01:45 PM
| | | 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 | 
June 18th, 2007, 04:15 PM
| | | 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 | | Thread Tools | Search this Thread | | | |
Posting Rules
| You may not post new threads You may not post replies You may not post attachments You may not edit your posts HTML code is Off | | | | | | 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.
|