2016-09-06 34 views
5

我有这样的代码:C++代码的功能参数

void longitudeChanged() { 
    Serial.println("Longitude: " + String(GpsLon.value,8)); 
} 

主:

GpsLon.onUpdate(longitudeChanged); 

我愿做这样的事情:

GpsLon.onUpdate({ 
    Serial.println("Longitude: " + String(GpsLon.value,8)); 
}); 

(就像我在Java脚本中做!); 但这不是很方便。怎么做?

TNX

埃里克

+0

究竟是什么是点这个?你根本不应该这样做。 – Annabelle

+2

@Link应该怎么做? – wally

+0

看看@ OMGTechy的回复 – Annabelle

回答

8

看哪,强大的拉姆达!

#include <iostream> 

template <typename T> 
void myFunction(T t) { 
    t(); 
} 

int main() { 
    myFunction([](){ std::cout << "Hi!" << std::endl; }); 
} 

If you'd like to learn more about them, take a look here

要解密这一点,这里有一个细目:

  • 你有一个功能,通过模板参数采用另一种功能。
  • 该函数除了调用它的参数外别无其他。
  • 在main中,你可以用lambda作为参数来调用该函数。
  • 该lambda可以分成三部分[](捕获,现在不用担心太多)()函数参数,在这种情况下没有)和{ ... }(正文,就像任何其他函数)。

所以拉姆达部分只是这样的:

[](){ std::cout << "Hi!" << std::endl; } 

这里有一个拉姆达接受一个int并返回翻一番价值的另一个例子:

[](int value){ return value * 2; } 
+0

是的 - 这就是我一直在寻找的东西。 谢谢。 –