0

私はデフォルトの引数を持つC++関数を持っています。ユーザーがデフォルト引数の値を指定しているかどうかを調べるにはどうすればよいですか?

この引数にデフォルト値があると、この関数を呼び出すユーザーはこの引数の値を指定しなかったため、デフォルト値が割り当てられました(B)userこの引数のデフォルト値を指定しました。

これらの2つのケースを区別する必要があります。これを行う最善の方法は何ですか?

+5

2つの異なるオーバーロード機能を使用します。 –

+1

それは何を解決するでしょうか?何を正確に解決しようとしていますか? – Nelfeal

+0

デフォルト値の正しい選択はコンテキストによって異なります。ユーザーが値を指定していない場合は、コンテキストに応じてデフォルトを選択する必要があります。しかし、その値がユーザーからのものである場合、私はコンテキストを心配することなくその値を使用するつもりです。 – user2524261

答えて

3

AFAIKでは、コンパイラはコールサイトでデフォルトの引数を代入します。これとまったく同じ引数を提供するユーザーと区別する方法はありません。

2つの異なる機能を使用して、2つのケースを区別することができます.1つは、デフォルトを指定する引数があり、1つは不要です。機能のための

-2
class A 
{ 
private: 
    const int _defaultValue = 0; 

public: 
    void function(int userValue = _defaultValue) 
    { 
     if (userValue != _defaultValue) 
     ....; 
     else 
     ....; 
.... 

同じ:

namespace { const int defaultValue = 0; } 
void function(int userValue = defaultValue); 
+3

ユーザーが引数として0を指定した場合でも、既定の引数またはユーザー指定の引数は区別できません。 –

+0

このような場合、オーバーロードするだけです: 'void function()'と 'void function(int userValue); – fgrdn

0

使用オーバーロードされた関数。

void do_great() 
{ 
    // default operation 
} 

void do_great(int value) 
{ 
    // non-default operation 
} 
関連する問題