Чтобы поддержать какую-то магию с компиляцией, я хотел бы использовать указатель-член, например: < /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++
Программы на C++. Форум разработчиков
1748629680
Anonymous
Чтобы поддержать какую-то магию с компиляцией, я хотел бы использовать указатель-член, например: < /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
}
Подробнее здесь: [url]https://stackoverflow.com/questions/69586634/error-converting-a-derived-pointer-to-member-into-a-base-pointer-to-member[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия