0

3 番目の部分の実装者に、値型による受け渡しではなく、参照入力引数型による受け渡しを使用させる方法を提案してください。ポインターを使用してこれを達成できることは知っていますが、参照でそれを行う方法がわかりません。

C++:

typedef struct data {
    int a;
    int b;
} data;

  //Ambiguous - pass by value
  //void fun(const data value) { // <= Need a way to restrict this type of imp  
  //    std::cout<<value.a<<value.b;
  //}

    // pass by reference 
    void fun(const data& value) {
         std::cout<<value.a<<value.b;
    }

int main() {
    data d;
    d.a = 1; d.b = 2;
    fun(d); 
    return 0;
}
4

2 に答える 2

2

私が理解しているように、あなたの質問は、サードパーティの実装者にヘッダーファイルを提供したいが、引数を値で受け取る関数を持つことを制限したいということです。

ヘッダー ファイルをインターフェイスとして公開する場合、関数をクラスに追加することをだれも止めることはできません。参照引数を受け取る関数を既に提供している場合、サードパーティの実装者は、あいまいなエラーが発生するため、引数を値で受け取る同じ名前の関数を追加できません。

于 2013-04-29T15:35:18.440 に答える
0

明確にしましょう:

// pass by CONSTANT reference 
void fun(const data& value) {
     std::cout<<value.a<<value.b;
}

// pass by reference 
void fun(data& value) {
     std::cout<<value.a<<value.b;
}

// pass by value 
void fun(data value) {
     std::cout<<value.a<<value.b;
}

// pass by pointer 
void fun(data* value) {
     std::cout<<value.a<<value.b;
}

入力パラメーターを値で渡したくない場合は、3 番目のバージョンを実装しないでください。

于 2013-04-29T15:35:06.110 に答える