0

2つのデータメンバーの1つで、それらを交互に繰り返し実行したいメソッドがあります。私は次のことを考えました

void myClass::alternating_method(){
    Graph G;
    &G = iteration_number%2 ? &A : &B;
    helper_method_which_modifies(G);
    iteration_number++;
    return;
}

whereABanditeration_numberはすべてmyClassメンバーですが、機能するかどうかはわかりません。それは私には正しいように思えますが、スタイルは私を間違ってこすります。object.alternating_method()望ましい結果は、ループを呼び出して、それを変更object.Aしてもらうことobject.Bです。

これは機能しますか?もっと良い方法はありますか?予期しない結果が生じるでしょうか?Gスコープ外になったときにデストラクタが呼び出されることを心配する必要がありますか?

編集:明確にするために、私はhelper_method_which_modifiesいくつかのメソッドを含む100行の省略形を意味しました。変更するのGは主にブーストグラフメソッドです。答えがわかったので、との間でalternator選択し、正しい変数を別のメソッドに渡す以外に何もしないものを用意するのが最善のようです。AB

4

5 に答える 5

4

Luchian Grigoreがすでに述べたように、L値が必要なため、機能しません。

アイデアはほとんど変更なしで機能しています。

void myClass::alternating_method(){
    Graph& G = iteration_number%2 ? A : B;
    helper_method_which_modifies(G);
    iteration_number++;
    return;
}

またはもう少し変更を加えて:

void myClass::alternating_method(){
    helper_method_which_modifies((++iteration_number%2) ? A : B);
}
于 2012-10-31T13:27:51.440 に答える
1

参照してくださいG

void myClass::alternating_method(){
    Graph& G = iteration_number%2 ? A : B;
    helper_method_which_modifies(G);
    iteration_number++;
    return;
}

もう1つの方法は、Gを完全に削除することです。

void myClass::alternating_method(){
    helper_method_which_modifies(iteration_number%2 ? A : B);
    iteration_number++;
    return;
}
于 2012-10-31T13:21:53.857 に答える
1

&演算子がaddress-of演算子であるという点で正しいです。ただし、アドレスに割り当てることはできません(たとえば、「右辺値と左辺値」などを検索してください)。

あなたができることそれはポインタとして宣言G、そのポインタがまたはのいずれかを指すようにします:AB

Graph* G = iteration_number%2 ? &A : &B;

C ++を使用しているため、もう1つの解決策は、参照Gを作成 することです。

Graph& G = iteration_number%2 ? A : B;
于 2012-10-31T13:23:04.153 に答える
1

使わずに呼んでみませんGか?このように、あなたはそれについて心配する必要はありません。

void myClass::alternating_method(){
    helper_method_which_modifies((iteration_number%2 ? &A : &B));
    iteration_number++;
    return;
}
于 2012-10-31T13:24:15.353 に答える
1

プレースホルダーGは実際には必要ありません。

void myClass::alternating_method(){
    if(iteration_number%2 == 1) {
        helper_method_which_modifies(A);
    } else {
        helper_method_which_modifies(B);
    }
    iteration_number++;
}
于 2012-10-31T13:24:31.620 に答える