Amadeus W. M. wrote:
Quote:
>I have a bunch of templated functions:
>>
>template <class Type_t>
>double f2(Type_t x) { return 2*x; }
>>
>template <class Type_t>
>double f3(Type_t x) { return 3*x; }
>>
>>
>>
>and a wrapper function, also templated, which I want to take f2 and
>f3 as arguments:
>>
>template <class Type_t, double (*f)(Type_t)>
>double foobar(Type_t x) {
> double y=0, z=0;
>>
> // compute something complicated from x first,
> // the same for all function pointers f.
> z = 4*x; // over-simplification here.
>>
> // main computation.
> y=f(z);
>>
> return y;
>}
>>
>>
>Then,
>>
>void some_function(){
> double x=5, y=0;
>>
> y=foobar<double,f2>(x);
> cout << y << endl;
>>
> y=foobar<double,f3>(x);
> cout << y << endl;
>}
>>
>works just fine.
>>
>>
>>
>The problem is what happens when all these are members of a class:
>>
>>
>class A
>{
>public:
>>
> template <class Type_t, double (*f)(Type_t)>
> double foobar(Type_t x) {
> double y=0, z=0;
>>
> // compute something complicated from x first,
> // the same for all function pointers f.
> z = 4*x; // over-simplification here.
>>
> // main computation.
> y=f(z);
>>
> return y;
> }
>>
>>
>>
>>
> template <class Type_t>
> double f2(Type_t x) { return 2*x; }
>>
> template <class Type_t>
> double f3(Type_t x) { return 3*x; }
>>
>>
>>
> void some_function(){
> double x=5, y=0;
>>
> y=foobar<double,A::f2>(x);
> cout << y << endl;
>>
> y=foobar<double,A::f3>(x);
> cout << y << endl;
> }
>>
>>
>};
>>
>>
>This doesn't compile. With g++-4.0.2 I get these errors:
>>
>g++ -g -Wall -o templtemplfunc templtemplfunc.C
>templtemplfunc.C: In member function 'void A::some_function()':
>templtemplfunc.C:39: error: no matching function for call to 'A::foobar(double&)'
>templtemplfunc.C:42: error: no matching function for call to 'A::foobar(double&)'
>>
>Compilation exited abnormally with code 1 at Tue Jul 4 13:01:55
>>
>>
>How exactly do I call A::foobar() from within A::some_function()?
>Is what I want to do possible in the first place?
>>
>Thanks!
are different from a regular function.