如何将指向基类成员的指针强制转换为指向派生类的同一成员的指针

时间:2015-12-01 05:07:38

标签: c++ templates pointer-to-member

考虑以下示例:

struct foo {
    int bax;
};

struct fuu : foo {
};

template<int foo::*>
struct tox {};

template<int fuu::*>
struct tux {};

int foo::* xo = &foo::bax;
int fuu::* xu = &fuu::bax;   // works

typedef int foo::*boz;

typedef tox<&foo::bax> qox;
typedef tux<&fuu::bax> qux; // fails: 'int foo::*' cannot be converted to a value of type 'int fuu::*'
typedef tux<(boz)&fuu::bax> qux; // fails: non-type template argument of type 'boz' (aka 'int foo::*') cannot be converted to a value of type 'int fuu::*'

此示例也可在http://coliru.stacked-crooked.com/a/15f3e7acd8de04a3上获得,clang ++和g ++都会产生相同的错误。

如何投射fuu :: bax以便模板tux接受它?

1 个答案:

答案 0 :(得分:3)

不幸的是,我认为还没有办法做到这一点。有关此问题的open defect report。您将不得不以某种方式解决此问题,例如更改integer以使其接受tux,或添加其他模板参数:

int foo::*