8

私は 8 年間のコーディング経験がありますが、演算子[]がパラメーターとして関数定義に渡されるのを見たことがありません。

たとえば、次のコード (オープン ソース プロジェクトから):

bree::porder(m_root, [] (treenode* node) { delete node; }); 

コーディングの生涯を通して、私は常に[]、パラメーターとしてではなく、演算子のオーバーロードとして定義してきました。

では、この新しい構文は何を意味するのでしょうか?

Visual Studio 2003 に付属のコンパイラを使用しています。VS 2003 でコンパイルできるように上記のコードを変更するにはどうすればよいですか?

4

3 に答える 3

16

これは、コードを同じ定義の関数オブジェクトに置き換えることができるC++ラムダです。このリンクには、Functor を使用する例とラムダを使用する例の 2 つの例が示されています。

于 2011-07-24T06:00:50.787 に答える
5

他の回答が述べているように、それはC++0xランバをサポートするためのまったく新しい構文です。VS2010より前のバージョンのVisualStudioではサポートされていないため、そのコードスニペットをVS 2003で機能させるには、関数またはファンクターオブジェクトを使用するようにコードを再調整する必要があります。

私は次のようなものがあなたのために働くかもしれないと思います:

// somewhere where it would be syntactically valid to 
//  define a function
void treenode_deleter(treenode* node)
{
    delete node;
}


// ...

bree::porder(m_root, treenode_deleter); 
于 2011-07-24T06:16:04.507 に答える
5

無名関数のC++0x構文のように見えます

于 2011-07-24T06:01:03.030 に答える