Но это не так:
struct BaseT
{
};
struct DerivedT: public BaseT
{
};
struct T
{
DerivedT m_test;
};
using BaseTMemPtr = BaseT T::*;
int main()
{
T test;
BaseT* simplePtr = &test.m_test; //It is DerivedT*, but can be used as BaseT*
BaseT (T::*memPtr) = &T::m_test; //Error, BaseT T::* cannot be used as DerivedT T::*
BaseTMemPtr memPtr2 = &T::m_test; //Error, just the same
}
< /code>
Как я вижу, есть два способа интерпретировать указатели на члены класса: < /p>
- - это указатель dreviedt , который указывает на объект dreivedt внутри объекта t класса (поэтому указывает на объект относительно другого объекта).
Код: Выделить всё
*DerivedT T::** - указывает на некоторую часть объекта класса t , который, кстати, имеет свой путь type.
Код: Выделить всё
DerivedT T::*
Почему C ++ выбрал второй подход? Что может быть нежелательным следствием включения использования dreviedtt t ::* в качестве базы t ::*? Каковы указатели на членов на практике?
Обновление:
Я хотел бы достичь следующего:
желаемое решение
Но это не работает, если участники не работают, но код>, но necdants
Постоянный (не указанный (не указатель-член) указатель на нестатический объект. (время компиляции) < /li>
Участники класса Mark как включены - например, В массиве - (время компиляции) < /li>
Construction (Runtime) < /li>
Участники вызовут функцию регистра (время выполнения) < /li>
В функции регистра необходимо проверить, разрешено ли абонент (мы получаем его в качестве регулярного указателя) называть эту функцию или нет (выполнение выполнения). Описание:
В библиотеке у меня есть базовый класс CRTP (
Код: Выделить всё
DataBindingКод: Выделить всё
registerMemberВ функции Registermember выполнение у меня есть указатель объекта (содержащий объект), у меня есть определенный список пользователя с компиляцией, который определяет, что идентифицирует, что я идентифицирует, и на самом деле идентификация, и на самом деле, и уникально-идентифицированные), и я могу быть заменен на идентификацию. Мне нужно проверить, разрешено ли фактический указатель члена для вызова функции (он был помечен во время компиляции).
Подробнее здесь: https://stackoverflow.com/questions/695 ... lymorphism
Мобильная версия