Re: Define pointer to member as a template
On Apr 16, 1:07 pm, Michael DOUBEZ <michael.dou...@free.fr> wrote:
ds a =E9crit :
On Apr 16, 12:38 pm, Michael DOUBEZ <michael.dou...@free.fr> wrote:
ds a =E9crit :
though the typedef compiles, the specialization of the map fails.
You have to indicate that Tp::ptr is a type.
[snip]
thanks for the reply. You would be correct if I did not actually
define the type!
[snip]
template<class Tp> class themap
{
public:
static std::map<std::string, typename Tp::ptr> smap;
};
template<class Tp>
std::map<std::string,typename Tp::ptr> themap<Tp>::smap;
Yes, typename should be used in themap<> also.
class test : public themap<test>
{
public:
int a;
int b;
typedef int test::*ptr;
};
I get 'ptr' : is not a member of 'test'... plus that the point is to
have the typedef in the template.
Yes, you cannot use Tp:: in themap. Only in functions otherwise you have
a circularity in the definition: themap<test>::ptr must be defined to
define test and test must be defined to define themap<test>::ptr.
The CRTP works only with functions.
Michael
Hi again Michael and thanks a lot for the clarifications. Though I
risk to become overly stubborn and besides the fact that I somehow get
the feeling that this cannot be done, I am not sure if this is
actually a conceptual error or a language limitation like template
typedefs. My original template should instantiate to
template<test> class themap
{
public:
typedef int test::*ptr;
static std::map<std::string, test::ptr> smap;
};
However the typedef provides only an alias to the real name and does
not define a new type as I would like and I think that this is rather
the problem. Anyway, thanks for the feedback!