1

http://ideone.com/5MHVzのコードを使用し て、ラムダ関数 (インライン) を C スタイルの関数ポインターにバインドできる方法に興味がありますが、状態がなくてもクラス関数でこれを行うことはできません関与。それはいくつかの根本的な違いであるに違いありませんが、この場合にラムダバインディングがどのように可能であるかがわかりません(ラムダ生成コードへの概念的な this もあります)。回避策はありますか?

以下のコード:

#include <iostream>
#include <functional>
using namespace std;

typedef int (*http_cb) (int*);

struct http_parser_settings {
  http_cb      on_message_begin;
};

class HttpParser
{
  int OnMessageBegin(int* val){}

  HttpParser()
  {
    http_parser_settings settings;
    //settings.on_message_begin = std::bind(&HttpParser::OnMessageBegin, this, std::placeholders::_1); -- this one does not compile
   settings.on_message_begin = [](int* p){ return 0;};
  }
};

int main() {

}
4

2 に答える 2

3

非キャプチャラムダは関数ポインタに変換できます。本質的に無料の機能なので問題ありません。

于 2012-10-10T14:27:07.963 に答える
-1

MSVC2010 でも std::function オブジェクトにラムダを格納できるため、生の関数ポインターを取得する方法が必要です。私はそれがどのように機能するかの詳細を掘り下げたことはありませんが、以前にこの機能を使用したことは確かです.

于 2012-10-10T14:32:07.890 に答える