我想在下面的代码中实现“这一行”。最合乎逻辑的方法是将 GetDog 设置为静态,但是我不能使用“this”。有没有办法绕过它?(不,因为我正在尝试,有几行与问题无关)
#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 中,它可能是物理学家编写的,因此他们可能不会在编程中做最明智的事情。如果这样做有其他优势,我仍然想要。
从之前的投票中我可以看出这可能不是我认为的常规方法。请在这样做之前发表评论。