[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.c++

Template methods with function pointers

canderse

10/31/2008 4:16:00 AM

I am beginning to use templates alot (in visual studio 2008) but I
writing this simple template
that has a method which takes a function pointer as an argument and i
cant figure out why the will not compile

LONG __cdecl FilterListProc(LPVOID Item1,LPVOID Item2,LPVOID pParam =
NULL);

template<class TItemList,class TItemData>
class CFiltredListImpl
{
private:
class vaiables anf methods
...
public:
BOOL Filter(LONG (__cdecl *FilterProc)(LPVOID,LPVOID,LPVOID),LPVOID
lpPram = NULL)
{
return TRUE;
};

};

idearly it would like the function to look like this

LONG __cdecl FilterListProc(LPVOID Item1,LPVOID Item2,LPVOID pParam =
NULL);

template<class TItemList,class TItemData>
class CFiltredListImpl
{
private:
class vaiables anf methods
...
public:
BOOL Filter(LONG (__cdecl *FilterProc)(LPVOID,LPVOID,LPVOID) =
FilterListProc ,LPVOID lpPram = NULL)
{
return TRUE;
};

};

or even better it would be better if I could write it like this

template<TItemData>
LONG __cdecl FilterListProc(TItemData & Item1,TItemData & Item2,LPVOID
pParam = NULL);

template<class TItemList,class TItemData>
class CFiltredListImpl
{
private:
class vaiables anf methods
...
public:
BOOL Filter(LONG (__cdecl *FilterProc)(TItemData &,TItemData,LPVOID)
= FilterListProc ,LPVOID lpPram = NULL)
{
return TRUE;
};

};


My first question is why will the first version compile and my second
is the other two implementation feasible

Your help would be apreciated

Thanks Christian Arild Stær Andersen
2 Answers

canderse

10/31/2008 5:24:00 AM

0

I did get it to compile with this

template<TItemData>
LONG __cdecl FilterListProc(TItemData & Item1,TItemData & Item2,LPVOID
pParam = NULL);

template<class TItemList,class TItemData>
class CFiltredListImpl
{
private:
class vaiables anf methods
...
public:
BOOL Filter(LONG (__cdecl *FilterProc)(TItemData &,TItemData
& ,LPVOID),LPVOID lpPram = NULL)
{
return TRUE;
};

};

dascandy@gmail.com

11/1/2008 8:35:00 AM

0

On Oct 31, 6:24 am, cande...@gmail.com wrote:
> I did get it to compile with this
>
> template<TItemData>
> LONG __cdecl FilterListProc(TItemData & Item1,TItemData & Item2,LPVOID
> pParam = NULL);
>
> template<class TItemList,class TItemData>
> class CFiltredListImpl
> {
>         private:
>         class vaiables anf methods
>         ...
>         public:
>         BOOL Filter(LONG (__cdecl *FilterProc)(TItemData &,TItemData
> & ,LPVOID),LPVOID lpPram = NULL)
>         {
>                 return TRUE;
>         };
>
> };
>
>

The second misses an ampersand in front of the function name, I'm not
sure if that's all.

The third misses both the ampersand and the template instantiation
parameters, which means that you can't pass the plain template - you
have to pass it as an instantiated function:

BOOL Filter(LONG (__cdecl *FilterProc)(TItemData &,TItemData
& ,LPVOID) = &FilterListProc<TItemData>,LPVOID lpPram = NULL)

which should work.

Good luck.