3

などのメソッドを持つ理由は何ですかvoid QList::push_back ( const T & value )

QTで同じことをしている場合append()、ドキュメンテーションはどのような互換性を意味しますか。誰でもこれを詳しく説明してもらえますか

以下は、 QTの公式ドキュメントからの声明です

"この関数は STL 互換性のために提供されています。append(value) と同等です"

4

4 に答える 4

7

これは通常、テンプレート パラメーターとして標準コンテナーを想定するメソッド テンプレートを で使用できるようにするために使用されQListます。これらは同じメソッドを共有するためです。

例えば:

template<typename Container>
void move_elements(Container &to, const std::vector<int> &from)
{
  for (auto elem : from)
    to.push_back(elem);
}

パラメータとしてastd::list<int>と a の両方で呼び出すことができます。QList<int>to

于 2013-08-01T09:27:01.037 に答える
4

これは互換性のためであり、QList を標準コンテナーで動作するアルゴリズムに送信できます 。これが主な利点だと思いますので、 からのすべての操作を使用できます<algorithm>find_iffromの例を挙げ<algorithm>ます:

bool hasChildChecked(){
      return std::find_if(childItems_.begin(), 
                          childItems_.end(),checked()) != childItems_.end();
      }

私のchildItems_は次のように宣言されています:

QList<TreeItem*> childItems_;

struct checked {
           bool operator()(const TreeItem* t) {
               return t->moduleInfo_.currentlyEnabled;
           }
       };

この種の互換性は私の時間を本当に節約し、コーディングをより簡単にします。

于 2013-08-01T09:30:07.390 に答える
1

次のような場合に遭遇する可能性があります。

template <
    template <
        typename ValueType,
        typename Allocator
    > class Container
> class garbage_collector
{
    /* some implementation */
};

QList は STL コンテナーと同じメソッド名を持っているため、このコンテキストで使用できます。

于 2013-08-01T09:26:46.783 に答える
0

C++ の STL (標準テンプレート ライブラリ) は、リストとベクトルに関数 push_back() を使用するため、ほとんどの C++ プログラマーにとっておなじみの方法です。したがって、メソッドを呼び出す際にテンプレート パラメーターの互換性を確保するための追加のメソッドが提供されています。

于 2013-08-01T09:25:24.637 に答える