Чтобы поддержать какую-то магию с компиляцией, я хотел бы использовать указатель-член, например: < /p>
struct BaseT
{
};
struct DerivedT: public BaseT
{
};
struct TestT
{
DerivedT testMem;
typedef BaseT (TestT::* TestTMemPtr);
constexpr TestT() = default;
static constexpr TestTMemPtr testMemOffset()
{
return &TestT::testMem;
}
};
int main()
{
constexpr TestT test;
}
< /code>
Я не могу вернуть члена по указателю к указателю в качестве члена указателя к базе, я получаю эту ошибку с помощью Clang: < /p>
не могу инициализировать return object of testt :: testtmempt Testt ::*'< /p>
< /blockquote>
Я также попробовал его с помощью GCC, но получите эту ошибку: < /p>
ошибка: неверная преобразование из' dreviedt testt ::*to 'testt :: testtmempt /> < /blockquote>
Это нормальное поведение? Я думал, что всегда могу использовать полученный указатель в качестве базового указателя? Testt ::*:
struct BaseT
{
};
struct DerivedT: public BaseT
{
};
struct TestT
{
DerivedT m_test;
};
using BaseTMemPtr = BaseT TestT::*;
int main()
{
TestT test;
BaseT* simplePtr = &test.m_test; //It is DerivedT*, but can be used as BaseT*
BaseT (TestT::*memPtr) = &TestT::m_test; //Error, BaseT TestT::* cannot be used as DerivedT TestT::*
BaseTMemPtr memPtr2 = &TestT::m_test; //Error, just the same
}
Подробнее здесь: https://stackoverflow.com/questions/695 ... -to-member
Ошибка преобразования «полученного указателя на член» в «базовый указатель на член» ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение