LINUX.ORG.RU

История изменений

Исправление 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, ну или без них