いくつかのデータメンバーを持つクラスがあり、一方を返すクラスメソッドが必要で、次に呼び出されたときにもう一方の値を返すとします。何かのようなもの:
class MyClass
{
public:
MyClass():switch(0){};
int get();
private:
int intA, intB;
int sw;
};
int MyClass::get()
{
if ( (++sw)%2 )
return intA;
else
return intB;
}
それを行うためのよりエレガントな方法は何でしょうか?if...elseステートメントはあまり好きではありません。returnのようなものには問題ありませんが、実際にもっと複雑な操作を使用している場合は、大量のコードを複製することになります。または、ポイントしている要素を解決した後に呼び出される2番目のメソッドを各メソッド内に作成する必要があります。
私がやりたいのは、理想的には、何らかの形のポインターを使用することです。
class MyClass
{
public:
MyClass():switch(&intA){};
int get();
void toggleSwitch();
private:
int intA, intB;
int * sw;
};
int MyClass::get()
{
return *sw;
}
void MyClass::toggleSwitch()
{
if ( sw == &intA )
sw = &intB;
else
sw = &intA;
}
またはその効果への何か。私はtoggleSwitch()を呼び出すことができ、クラスにどちらかの値を簡単に操作させることができます。
私はまだそれが好きではありません。可能であれば避けたいのですが、この場合は必要ありません。このネイキッドポインタの使用はかなり安全なはずですが、std :: unique_ptrのように各要素を保持してから、それらをstd::swapすることができると考えていました。しかし、その場合、ポインタは要素を所有し、代わりに動的メモリになります。
それで、それを行うためのより良い方法はありますか?