By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
431,983 Members | 1,717 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 431,983 IT Pros & Developers. It's quick & easy.

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

P: 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

Jun 16 '07 #1
Share this Question
Share on Google+
5 Replies


P: n/a
Alan wrote:
....
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.
Jun 17 '07 #2

P: n/a
Alan wrote:
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.
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());
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
Jun 17 '07 #3

P: n/a
Thank you. This was very helpful. Alan

Jun 17 '07 #4

P: n/a
On Jun 16, 10:33 pm, Alan <jalantho...@verizon.netwrote:
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

Jun 18 '07 #5

P: n/a
Never mind. I found some information and discovered on another
thread that I should use "result_type."

Thanks again, Alan

Jun 18 '07 #6

This discussion thread is closed

Replies have been disabled for this discussion.