次のコードで「この行」を実現したいと思います。最も論理的な方法は、GetDog を静的に設定することですが、「これ」を使用することはできません。それを回避する方法はありますか?(そうではありません、私はそれを試していたので、質問に関係のない行がいくつかあります)
#include <iostream>
class Dog
{
public:
static int a;
Dog& GetDog(int k)
{
this->a = k;
return *this;
}
int bark()
{
return a*a;
}
};
int Dog::a=0;
int main()
{
Dog puppy;
int i = puppy.GetDog(4).bark();
cout<<i<<endl;
cout<<Dog::a<<endl;
//i = Dog::GetDog(6).bark(); //this line
return 0;
}
これを行うことに大きな利点があるわけではありません (クラスを宣言する必要がないというだけです) が、私が使用している一部のパッケージで使用されていることがわかりました。それがどのように行われるかを理解したいと思います。
class EXOFastFourierTransformFFTW
{
public:
static EXOFastFourierTransformFFTW& GetFFT(size_t length);
virtual void PerformFFT(const EXODoubleWaveform& aWaveform, EXOWaveformFT& aWaveformFT);
...
int main()
{
EXODoubleWaveform doublewf;
EXOWaveformFT wfFT;
...
EXOFastFourierTransformFFTW::GetFFT(doublewf.GetLength()).PerformFFT(doublewf,wfFT);
...
この静的関数の使用法は、おそらく物理学者によって書かれた Geant4 にも見られるため、彼らはプログラミングで最も賢明なことをしていない可能性があります。そうすることで他の利点があるのであれば、私はまだ欲しいと思っています。
私が思っていたように、これはおそらく通常の方法ではないことがわかる前の投票から。そうなる前にコメントしてください。