История изменений
Исправление
wota,
(текущая версия)
:
Дженерики просты, как деревяшка, и подходят для большей части обощенного кода.
так это же описание goto ;)
А если тебе нужны сложные штуки, то ты используешь макросы, которые в ржавчине на порядок более полезны, чем в Си или С++.
ну вот, например, мне для тестов нужно было генерировать бинарное представление произвольных данных, завел такой класс (убрал «лишний» код для примера):
/**********************************************************************************************/
struct blob_factory
{
template<class... Args>
blob_factory( Args... tail )
{
add( tail... );
}
template<class T>
void add( T value )
{
size_t sz = buf_.size();
buf_.resize( sz + sizeof(T) );
*((T*) &buf_[ sz ]) = value;
}
void add( item_type t )
{
buf_.push_back( (char) t );
}
void add( const char* value )
{
while( *value )
buf_.push_back( *value++ );
}
void add( const char16_t* value )
{
while( *value )
add( *value++ );
}
template<class T, class... Args>
void add(
T value,
Args... tail )
{
add( value );
add( tail... );
}
std::vector<char> buf_;
};
использую так:
blob_factory(
'\0',
item_type::object,
int32_t( 4 ), u"benv",
int32_t( 3 ), u"bdc",
item_type::list, int32_t( 2 ),
item_type::boolean, (char) false,
item_type::integer, int64_t( 1 ) )
покажи пример на макросах rust, ну или без них
Исходная версия
wota,
:
Дженерики просты, как деревяшка, и подходят для большей части обощенного кода.
так это же описание goto ;)
А если тебе нужны сложные штуки, то ты используешь макросы, которые в ржавчине на порядок более полезны, чем в Си или С++.
ну вот, например, мне для тестов нужно было генерировать бинарное представление произвольных данных, завел такой класс:
/**********************************************************************************************/
struct blob_factory
{
template<class... Args>
blob_factory( Args... tail )
{
add( tail... );
}
template<class T>
void add( T value )
{
size_t sz = buf_.size();
buf_.resize( sz + sizeof(T) );
*((T*) &buf_[ sz ]) = value;
}
void add( item_type t )
{
buf_.push_back( (char) t );
}
void add( const char* value )
{
while( *value )
buf_.push_back( *value++ );
}
void add( const char16_t* value )
{
while( *value )
add( *value++ );
}
template<class T, class... Args>
void add(
T value,
Args... tail )
{
add( value );
add( tail... );
}
std::vector<char> buf_;
};
использую так:
blob_factory(
'\0',
item_type::object,
int32_t( 4 ), u"benv",
int32_t( 3 ), u"bdc",
item_type::list, int32_t( 2 ),
item_type::boolean, (char) false,
item_type::integer, int64_t( 1 ) )
покажи пример на макросах rust, ну или без них