каст ребенка к родителю не работает в адресах полей класса
От: m.e.  
Дата: 02.04.12 02:01
Оценка:
идея была в том, чтобы сказать "а отсортируйка-ты записи вот по этому полю", но получился облом

struct Comparable {};
struct Child1: public Comparable {};
struct Child2: public Comparable {};

struct DatabaseRecord {
    Child1* field1;
    Child2* field2;
    void sort_by(Comparable* DatabaseRecord::* field) { /* ... */ }
};


int random() {/*...*/ }

int main() {
    DatabaseRecord table; /// чтобы упростить -- table состоит у нас ровно из одной DatabaseRecord

    Comparable* DatabaseRecord::* f1 = &DatabaseRecord::field1; // error: invalid conversion from `Child1* DatabaseRecord::*' to `Comparable* DatabaseRecord::*'
    Comparable* DatabaseRecord::* f2 = &DatabaseRecord::field2; // error: invalid conversion from `Child2* DatabaseRecord::*' to `Comparable* DatabaseRecord::*'

    Comparable* DatabaseRecord::* f  = random()>0 ? f1 : f2 ;
    table.sort_by( f );

    return 0;
}


вопрос в том, почему такой каст не разрешен — им что-то можно сломать? но что?

p.s. g++ (Debian 4.3.2-1.1) 4.3.2
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.