3

バックグラウンド

私はArduino用のstlのようなコンテナを書いているプロジェクトの途中です。これまでのところ、deque、vector、および string を正常に記述できました。

問題

mapコンテナに問題が発生しました。何らかの理由で、map::insert()メソッドで、コンパイラは型指定子を期待していると言っています。問題に関連するすべてのコードを含めました。どんな助けでも大歓迎です。

///////////////////////////////////////////////////////////////////////////////
// pair
///////////////////////////////////////////////////////////////////////////////
template<typename K, typename V>
class pair {
public:
    pair( const K& key, const V& val )
    : _key_( key )
    , _val_( val )
    {}

    pair( const pair& p )
    : _key_( p.key() )
    , _val_( p.val() )
    {}

    virtual ~pair(){}

    K& key(){
        return _key_;
    }

    V& val(){
        return _val_;
    }

private:
    K _key_;
    V _val_;
};

///////////////////////////////////////////////////////////////////////////////
// map
///////////////////////////////////////////////////////////////////////////////
template<typename K, typename V>
class map {
public:
    map()
    : _size_( 0 )
    , _items_( 0 )
    {}

    virtual ~map(){
        for( int i = 0; i < _size_; ++i )
            delete _items_[i];

        free( _items_ );

    }

    void insert( const pair<K,V>& p ){
        _items_ = reinterpret_cast<kick::pair<K,V>**>( realloc( _items_, (sizeof( void* ) * (++_size_)) ) );
        _items_[_size_ - 1] = new pair( p ); //error: expected type-specifier
    }

    V& operator[]( const K& key ){
        for( int i = 0; i < _size_; ++i ){
            if( _items_[i].key() == key )
                return _items_[i].val();

        }

    }

private:
    int _size_;
    pair<K,V>** _items_;

};
4

2 に答える 2

3

pair型ではなく単なるテンプレートです。コンパイラはテンプレート パラメーター (この場合は型) を期待しています。これは、あなたの行が次のようになることを期待しています:

_items_[_size_ - 1] = new pair<K,V>( p );

いいえ、テンプレート パラメーターを推測することはできません。これは、型ではなく、テンプレート関数に対してのみ機能します。

于 2013-01-10T15:03:15.567 に答える
1

new pair<K,V>( p )そこに欲しいものです。

私自身は、その上にフラットマップを実装するvectorので、メモリ管理を行う必要はありませんでした。これの利点は、間接的なレベルを削除できることです。(間接化はパフォーマンス キラーです)。

もう 1 つの考えは、ソート マークの前のものをソートし、それ以降のものをごちゃまぜにする最高水準のソート マークを設定することです。これにより、コンテナが大きくなったときに比較が少なくなる可能性があります。ただし、最初にフラットマップを機能させます。

于 2013-01-10T15:01:18.487 に答える