gpt4 book ai didi

c++ - 如何将指向基类成员的指针转换为指向派生类相同成员的指针

转载 作者:行者123 更新时间:2023-11-30 02:35:05 25 4
gpt4 key购买 nike

考虑以下示例:

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 接受?

最佳答案

不幸的是,我认为目前还没有办法做到这一点。有一个 open defect report关于这个问题。您将不得不以某种方式解决它,例如更改 tux 以便它接受 int foo::* ,或者添加另一个模板参数:

template <typename T, int T::* arg>
struct tux {
static_assert(std::is_convertible<int T::*, int fuu::*>::value,
"T must be an unambiguous accessible base of fuu");
// note that this still works
// however, you won't be able to use it as a template argument
static constexpr int fuu::* pm = arg;
};

关于c++ - 如何将指向基类成员的指针转换为指向派生类相同成员的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34012997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com