Passing member function pointers are template parameters



 DEVELOP > c-Plus-Plus > Passing member function pointers are template parameters

LINK TO THIS PAGE  


rating :  0   |  0


  Page 1 of 1

1

 
Topic: DEVELOP > c-Plus-Plus
User: "Dilip"
Date: 06 Nov 2006 04:35:29 PM
Object: Passing member function pointers are template parameters
I am stuck with a syntactical issue and would appreciate some help:
I have a class with a templated mem fn like so:
class A
{
};
template<typename Ret, typename P1, Ret (A::*fp)(P1*)>
void A::somefunc()
{
P1* p = getP1FromSomewhere();
someotherfunc(p, fp);
}
// should I re-write the whole template shebang for someotherfunc?
// I tried (probably w/o understanding completely)
template<typename X, typename T>
void A::someotherfunc(X* p1, T func)
{
// fails with compiler error the statement does not evaluate to a
function being called
// with one parameter
func(p1);
}
What is the correct way to pass function pointers in a cascade?
P.s: I am mucking around with legacy code and although there might be
better ways of acheiving what I want, I am not in a position to make
whole-sale code changes
.

User: ""

Title: Re: Passing member function pointers are template parameters 06 Nov 2006 05:25:42 PM
Dilip wrote:

I am stuck with a syntactical issue and would appreciate some help:

I have a class with a templated mem fn like so:

class A
{
};

template<typename Ret, typename P1, Ret (A::*fp)(P1*)>
void A::somefunc()
{
P1* p = getP1FromSomewhere();
someotherfunc(p, fp);
}

// should I re-write the whole template shebang for someotherfunc?
// I tried (probably w/o understanding completely)
template<typename X, typename T>
void A::someotherfunc(X* p1, T func)
{
// fails with compiler error the statement does not evaluate to a
function being called
// with one parameter
func(p1);
}

What is the correct way to pass function pointers in a cascade?

P.s: I am mucking around with legacy code and although there might be
better ways of acheiving what I want, I am not in a position to make
whole-sale code changes

Not 100% sure about your class requirements as the defintion is
empty...but here is what I could come up with based on the function
sgnatures you had..
class P1
{
};
class P
{
public:
void Pfunc(P1* p1_ptr)
{
};
};
class A
{
public:
template<typename Ret, typename tP1, typename tP2, Ret
(tP1::*fp)(tP2*)>
void somefunc(tP1* p) ;
template<typename X, typename T>
void someotherfunc(X* p1, T func);
};
template<typename Ret, typename tP1, typename tP2, Ret
(tP1::*fp)(tP2*)>
void A::somefunc(tP1* p)
{
someotherfunc(p, fp);
}
template<typename X, typename T>
void A::someotherfunc(X* p, T func)
{
P1* p1new = new P1;
(p->*func)(p1new);
delete p1new;
}
.

User: "Victor Bazarov"

Title: Re: Passing member function pointers are template parameters 06 Nov 2006 05:19:18 PM
Dilip wrote:

I am stuck with a syntactical issue and would appreciate some help:

I have a class with a templated mem fn like so:

class A
{
};

template<typename Ret, typename P1, Ret (A::*fp)(P1*)>
void A::somefunc()
{
P1* p = getP1FromSomewhere();
someotherfunc(p, fp);
}

// should I re-write the whole template shebang for someotherfunc?
// I tried (probably w/o understanding completely)
template<typename X, typename T>
void A::someotherfunc(X* p1, T func)
{
// fails with compiler error the statement does not evaluate to a
function being called
// with one parameter
func(p1);
}

What is the correct way to pass function pointers in a cascade?

Yes, but it's not a correct way to use a pointer to member. You need
an instance of the class. Did you mean to write
(this->*func)(p1);
(or some such)?
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
.
User: "Dilip"

Title: Re: Passing member function pointers are template parameters 06 Nov 2006 05:42:11 PM
Victor Bazarov wrote:

What is the correct way to pass function pointers in a cascade?


Yes, but it's not a correct way to use a pointer to member. You need
an instance of the class. Did you mean to write

(this->*func)(p1);

Thanks! Thats exactly what I was looking for.
.



  Page 1 of 1

1

 


Related Articles
 

NEWER

pg.1232     pg.940     pg.716     pg.544     pg.412     pg.311     pg.234     pg.175     pg.130     pg.96     pg.70     pg.50     pg.35     pg.24     pg.16     pg.10     pg.6     pg.3     pg.1

OLDER