идея была в том, чтобы сказать "а отсортируйка-ты записи вот по этому полю", но получился облом
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