Rolf Magnus wrote:
leriaat@elte.hu wrote:
I would like to create a calculator, and I thought that it would be a
good idea to write a universal "do_it" function that would have a
pointer to the operator and the two operands like this:
double do_it(double a, doulbe b, doulbe (*op)(doulbe, doulbe) ) {
return op(a, b); }
Well, the idea is great, but I don't know how could I put a pointer
to the + operator... Is it possible at all? I mean something like
this:
cout << do_it(1, 2, &(operator+) );
cout << do_it( 1, 2, std::plus<int>() );
You can't get pointers to the built-in operators. You can write
functions that themselves use those operators and then get pointers
to those functions. But I think it would be better to make an
abstract Operator base class and for each operation that your
calculator can do add a class that derives from it. Something like:
#include <iostream>
class Operator
{
[..]
};
class Plus : public Operator
{
[..]
};
class Minus : public Operator
{
[..]
};
void calc_result(double a, double b, const Operator& op)
{
std::cout << a << ' ' << op.name()
<< ' ' << b << " = "
<< op(a, b) << '\n';
}
I always thought that 'std::plus' and 'std::minus' were specifically
for that purpose (except the "name", of course). See 20.3.2, and the
documentation on your library implementation, of course.
polymorphism.