[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.c++

question about function pointer and template

Bruce !C!+

10/19/2008 8:10:00 AM

as we known , we can use function pointer as:
float Minus (float a, float b) { return a-b; }
float (*getOp())(float, float)
{
return &Minus;
}

int main()
{
float (*opFun)(float, float) = NULL;
opFun= getOp();
cout<< (*opFun)(3,4)<<endl;
}

but, if Minus() is a template such as

template <typename T>
T Minus (T a, T b) { return a-b; }

i had to write getOp() such as:

template <typename T>
T (*getOp())(T, T)
{
return &Minus;
}

int main()
{
cout<< (*getOp())(3,4)<<endl; //compile error: no matching function
for call to ‘getOp()’

}

why "no matching function for call to ‘getOp()’" ???
an if i write main() such as:

template <typename T> //compile error: expected primary-expression
before ‘template’; expected `;' before ‘template’
T (*opFun)(T, T) = NULL;
opFun=getOp(); //compile error:‘opFun’ was not declared in this
scope; no matching function for call to ‘getOp()’
cout<< (*opFun)(3,4)<<endl;

what shall i do? or how to edit my source code to fix this?
thanks all of you!
2 Answers

Pete Becker

10/19/2008 11:53:00 AM

0

On 2008-10-19 04:10:08 -0400, "Bruce !C!+" <aaniao002@163.com> said:

>
> template <typename T>
> T (*getOp())(T, T)
> {
> return &Minus;
> }
>
> int main()
> {
> cout<< (*getOp())(3,4)<<endl; //compile error: no matching function
> for call to â??getOp()â??
>
> }
>
> why "no matching function for call to â??getOp()â??" ???

Because getOp takes no arguments, so a plain call like that one doesn't
provide any way to figure out what type T should be. Use getOp<int>().

--
Pete
Roundhouse Consulting, Ltd. (www.versatilecoding.com) Author of "The
Standard C++ Library Extensions: a Tutorial and Reference
(www.petebecker.com/tr1book)

asm23

10/20/2008 8:17:00 AM

0

Hi, peter. I have another question:
Can someone explain the code snippet below:

float (*getOp())(float, float)
{
return &Minus;
}

It seems that we define a function named " getOp ", and it's return type
is a function pointer "float (*opFun)(float, float)". But I wonder
whether the parameters will passed to "Minus ".

Thanks!