Здравствуйте, Croessmah, Вы писали:
C>Здравствуйте, SaZ, Вы писали:
SaZ>>Я вообще к чему это всё — в техникуме нас учили языку Си. С тех пор я как-то привык что в void* можно положить любой указатель. И был удивлён, что это не так.
C>К слову, в C даже указатель на функцию нельзя преобразовывать в указатель на данные (в т.ч. в void*). Такое преобразование является возможным, но имеет неопределенный результат и не является переносимым. Но, например, POSIX требует чтобы такое преобразование было валидным.
Я правильно понял, что стандарт никак не обязует компиляторы использовать какой-то фиксированный размер указателя для определённого типа данных? Т.е. чисто теоретически возможна ситуация, когда
struct A // ...
{
virtual void f(){}
};
struct B // ...
{
virtual void f(){}
};
sizeof( &A::f ) != sizeof( &B::f ); // ?
В общем, если делать свою интроспекцию, то надо делать отдельные типы для хранения 1) указатели на поля, 2) указатели на методы, 3) указатели на виртуальные методы, 4) что-то ещё?