10 Stimmen

Warum funktioniert std::tr1::function mit Objective-C-Blöcken?

Ich war ziemlich überrascht, als ich feststellte, dass der folgende Code tatsächlich funktioniert:

std::vector<int> list /*= ...*/;
std::tr1::function<void(int)> func = ^(int i) {
  return i + 1;
};

std::for_each(list.begin(), list.end(), func);

Sieht aus wie std::tr1::function ist in der Lage, aus einem Objective-C-Block konstruiert zu werden, aber ich bin mir nicht ganz sicher, wie, da (zuletzt ich überprüft), seine Implementierung nicht speziell Blöcke behandeln. Ist es irgendwie implizit saugen die zugrunde liegende Funktion Zeiger aus? Ist dieses Verhalten außerdem undefiniert und wird es sich wahrscheinlich ändern?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X