2016-09-06 15 views
5

ように私はこのコードを持っている:メインでC++コードの引数

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

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

(Iと同様:

GpsLon.onUpdate(longitudeChanged); 

を私はこのような何かをしたいと思います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の内部では、引数としてラムダを指定してその関数を呼び出します。
  • ラムダは、[](キャプチャは今のところあまり心配しないでください)()関数の引数、この場合はありません)と{ ... }(他の関数と同じように本体)。

だから、ラムダ部分がちょうどこのさ:

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

はここでint型とリターンを取るラムダの別の例です、その値を倍増:

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

はい - これは私が探していたものです。 ありがとうございます。 –