Objective-CでC関数を書いています。最後のパラメーターにデフォルト値が必要です。
私はもう試した:
foo(int a, int b, int c = 0);
しかし、それはC++です。
私も試しました:
foo(int a, int b, int c)
{
...
}
foo(int a, int b)
{
foo(a, b, 0);
}
しかし、それはalsoC++です。
代わりにObjective-Cでこれを行う方法はありますか?
ObjCにはデフォルトのパラメーターはありません。
ただし、次の2つのメソッドを作成できます。
-(void)fooWithA:(int)a b:(int)b c:(int)c {
...
}
-(void)fooWithA:(int)a b:(int)b {
[self fooWithA:a b:b c:0];
}
Cの場合:ObjCを使用してCサブセットに追加される特別なものはありません。純粋なCで実行できないことは、ObjCでコンパイルしても実行できません。つまり、デフォルトのパラメータを持つことも、関数をオーバーロードすることもできません。代わりに2つの関数を作成します。
いいえ、objective-cはデフォルトのパラメーターをサポートしていません。 類似の質問 を参照してください
C関数の場合-いいえ。 Objective Cクラスメソッドの場合-はい、2つのメソッドを実行します。1つは短いパラメーターで、もう1つのメソッドを呼び出します。
または、ソースの名前を.mmに変更すると、C関数が魔法のようにC++になります。
可変長の引数リストを使用してC関数を作成できます。関数の宣言されたパラメーターの1つのデータ型として「...」を使用して、パラメーター引数リストの変数引数リストの開始位置を指定できます。 (これにより、リストの開始前に1つ以上の必要な引数を指定できます。)
printf()は、この機能(varargsとして知られている)を使用して記述された関数の例です。
printf(const char *restrict format, ...);
ここでは、最初の引数が必要であり、その後にゼロ個以上の追加の引数を続けることができます。
この方法で関数を記述した場合、欠落しているパラメーターのデフォルト値を提供できます。