$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Anthony Williams (anthony.williamsNOSPAM_at_[hidden])
Date: 2002-11-22 03:59:51
Martin Bosticky writes:
> Does anybody know if it is possible to extract a class type from a
> pointer-to-member type/object?
>
> ie if i have
>
> template<class pointer_to_member_type>
> void foo(pointer_to_member_type AMember)
> {
> ... //? can i figure out here what the type is for the object to which the
> pointer-to-member pointer belongs?
> }
For data members, it's quite straight forward:
template<typename T>
struct get_pointer_to_member_details;
template<typename Class,typename Member>
struct get_pointer_to_member_details<Member Class::*>
{
typedef Class class_type;
typedef Member member_type;
};
then use it like so:
template<typename pointer_to_member_type>
void foo(pointer_to_member_type AMember)
{
// extract class from pointer to member
typedef typename get_pointer_to_member_details<
pointer_to_member_type>::class_type class_type;
}
I can't remember OTOMH whether or not this will match
pointer-to-member-functions; I've a feeling that you'll have to partially
specialize get_pointer_to_member_details for each member function type you
want to match (number of args and cv-qualification)
HTH
Anthony
-- Anthony Williams Senior Software Engineer, Beran Instruments Ltd. Remove NOSPAM when replying, for timely response.