2012-01-20 6 views
1

私はarduinoコードをstm32(c/C++)に移植します。 xはaとbArduinoの機能ポートを制限する

の間にある場合:Xの場合:xは

Bよりも小さい場合

constrain(x, a, b) 

戻り

X:機能で私を助けてくださいはbより大きい

ここで
sensVal = constrain(sensVal, 10, 150); 

// limits range of sensor values to between 10 and 150 
+4

この機能は些細なことですが、何が問題になっていますか? –

+0

これは正しいですか? http://pastebin.com/trTi6x3G – SevenDays

+2

いいえ、これは正しくありません。C++では、各関数の戻り値の型だけでなく、各変数の型を指定する必要があります。あなたのパラメータには型がなく、関数には戻り値型の 'void'があります。つまり、値を返すことはできません。 –

答えて

7

使用を実証するための完全なプログラムを含むテンプレート・バージョン、(あなたがそれをコピーして貼り付けることができるはずです):

#include <iostream> 

template<class T> 
const T& constrain(const T& x, const T& a, const T& b) { 
    if(x < a) { 
     return a; 
    } 
    else if(b < x) { 
     return b; 
    } 
    else 
     return x; 
} 

int main() { 
    int value = 10; 
    std::cout << constrain(value, 5, 20) << "\n"  // prints "10" 
       << constrain(value, 15, 20) << "\n"  // prints "15" 
       << constrain(value, 5, 9) << std::endl; // prints "9" 
} 

これはoperator<を持っている任意のタイプのために使用することができます(これには、intfloatなどのすべての組み込み数値型が含まれます)。

1

Clamping (graphics)の下でWikipediaを見ると、タイプに依存しないテンプレートがあるようですね。

template<typename T> 
T clamp(T Value, T Min, T Max) 
{ 
    return (Value < Min)? Min : (Value > Max)? Max : Value; 
} 
+0

これをアンガーで楽しむための公正なプレー – thecoshman

3

Arduinoの場合、constrainは#defineされたマクロです。

Arduino.hのArduino.hで定義されています。あなたは

それは定義があります:-)それを読むことができるように

Arduinoのソースコードは、オープンソースライセンスの下でリリースされています。STM32にあなたのポートで作業を続けるだろう

#define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt))) 

もちろん、それはマクロなので、テキストを置き換えるだけです。したがって、パラメータはソースコードに表示されるため、新しいタイプの情報はありません。

マクロではなく関数を使用することをお勧めしますが、コードが既存のコードのポートであるため、マクロを引き続き使用する方が簡単です。その後、元のコードが改善または変更された場合は、で新しいポートを生成する必要がありません。

型付き関数、またはマクロではなくテンプレート関数を使用しようとすると小さな問題が発生し、後で混乱する可能性があります。マクロではなく関数を使用すると、Arduinoコードを移植しようとすると、新しい警告、エラー、バグなどが発生する可能性があります。具体的には、元のコードで一致する関数がないタイプまたはクラスのconstrainを使用している場合、Arduinoソースには明らかに存在しないエラーが発生します。あるいは、型付きやテンプレート化された関数が、マクロ版では発生しないC++型の変換を引き起こす可能性があります。あなたは、自分自身のために、またはあなたのコードを将来的に取る人のために、小さな「つかまえ」を残すかもしれません。

関連する問題