Сообщение Re[3]: Что такое Dynamically-sized types (DSTs) в Rust ? от 12.01.2015 10:54
Изменено 02.02.2015 20:04 night beast
Здравствуйте, x-code, Вы писали:
XC>ОК, то есть если тип динамический (точно известен лишь в рантайме — в частности указатель на базовый класс) то и размер динамический — это понятно. Ну а фича-то в чем? Как в С++ жили без этого и почему в Rust это вдруг понадобилось?
ну это и в сях может понадобиться:
не знаю, как проще написать. здесь присутствуют очевидные ограничения.
если в Rust что-то сделали что-то такое, то это неплохо.
XC>ОК, то есть если тип динамический (точно известен лишь в рантайме — в частности указатель на базовый класс) то и размер динамический — это понятно. Ну а фича-то в чем? Как в С++ жили без этого и почему в Rust это вдруг понадобилось?
ну это и в сях может понадобиться:
struct test {
virtual ~test () {}
virtual void foo () = 0;
};
struct test1 : test {
virtual void foo () {}
};
struct test2 : test {
virtual void foo () {}
};
struct test_factory {
virtual int capacity ( ) = 0;
virtual test * create ( char * buffer ) = 0;
};
template< typename Test >
struct test_factory_impl : test_factory {
virtual int capacity ( ) { return sizeof( Test ) + 4; }
virtual test * create ( char * buffer ) { return new(buffer) Test(); }
};
test_factory * foo ( ) {
if ( rand() % 2 ) {
static test_factory_impl< test1 > f1;
return &f1;
} else {
static test_factory_impl< test2 > f2;
return &f2;
}
}
int main () {
for ( int i = 0; i < 2; ++i ) {
test_factory * f = foo ( );
test * t = f->create( alloca( f->size( ) ) );
t->foo( );
}
}
не знаю, как проще написать. здесь присутствуют очевидные ограничения.
если в Rust что-то сделали что-то такое, то это неплохо.
Re[3]: Что такое Dynamically-sized types (DSTs) в Rust ?
Здравствуйте, x-code, Вы писали:
XC>ОК, то есть если тип динамический (точно известен лишь в рантайме — в частности указатель на базовый класс) то и размер динамический — это понятно. Ну а фича-то в чем? Как в С++ жили без этого и почему в Rust это вдруг понадобилось?
ну это и в сях может понадобиться:
не знаю, как проще написать. здесь присутствуют очевидные ограничения.
если в Rust что-то сделали что-то такое, то это неплохо.
XC>ОК, то есть если тип динамический (точно известен лишь в рантайме — в частности указатель на базовый класс) то и размер динамический — это понятно. Ну а фича-то в чем? Как в С++ жили без этого и почему в Rust это вдруг понадобилось?
ну это и в сях может понадобиться:
struct test {
virtual ~test () {}
virtual void foo () = 0;
};
struct test1 : test {
virtual void foo () {}
};
struct test2 : test {
virtual void foo () {}
};
struct test_factory {
virtual int capacity ( ) = 0;
virtual test * create ( char * buffer ) = 0;
};
template< typename Test >
struct test_factory_impl : test_factory {
virtual int capacity ( ) { return sizeof( Test ) + 4; }
virtual test * create ( char * buffer ) { return new(buffer) Test(); }
};
test_factory * foo ( ) {
if ( rand() % 2 ) {
static test_factory_impl< test1 > f1;
return &f1;
} else {
static test_factory_impl< test2 > f2;
return &f2;
}
}
int main () {
for ( int i = 0; i < 2; ++i ) {
test_factory * f = foo ( );
local_ptr<test> t = f->create( alloca( f->size( ) ) );
t->foo( );
}
}
не знаю, как проще написать. здесь присутствуют очевидные ограничения.
если в Rust что-то сделали что-то такое, то это неплохо.