Re: Supply code as template parameter
On Nov 5, 11:13 pm, "Edward Jensen" <edw...@jensen.invalid> wrote:
Hi,
I need to write many instances like the following struct
struct Function191 : public Function {
double operator()(double x) {
return cos(x) - x;
}
friend std::ostream& operator<< (std::ostream& os, const Function191&
f) {
return os << "cos(x) - x";
}
};
Is there a way to generalize this, such that I can write a generic
function
struct, which takes a parameter which is both interpreted as code for
operator() and as string for operator<<? I was hoping it would be possible
with templates for example:
struct<"cos(x) - x">Func f1;
struct<"exp(x) - log(x)">Func f2;
Is this possible?
Best,
Edward
Without using the preprocessor, an interpreter, or a special code
generator, I can't think of a way to do this.
The preprocessor approach might work for simple
cases but like one line functions of x which don't contain comma's.
struct Function
{
virtual double exec(double)const = 0;
virtual const char *name() const = 0;
double operator () (double x) {return exec(x);}
};
#define MAKE_FUNCTION(f_name,body)\
struct f_name:Function\
{\
double exec(x)const { return body;}\
const char *name() { return #f_name;}\
}
MAKE_FUNCTION(f191,cos(x)-x);
is a quick solution.
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]