作为一个假设问题,我想使用lambdas作为类方法。我知道这在职业环境下是不好的,但我还是很好奇。举个例子也许是展示我想做什么的最好的例子。下面是复数的基本类:
class Complex {
private:
double re, im;
public:
Complex() : re(0.0), im(0.0) {}
Complex(double re, double im) : re(re * 1.0), im(im * 1.0) {}
Complex(const Complex &c) = default;
~Complex() = default;
function<double(void)> getRe = [=]() -> double { return re; };
function<void(double)> setRe = [&](double re) -> void { this->re = re; };
function<double(void)> getIm = [=]() -> double { return im; };
function<void(double)> setIm = [&](double im) -> void { this->im = im; };
};起初,我尝试使用auto,而不是显式地指定函数类型,但是我遇到错误,说我不能在非静态字段中使用auto。
这似乎确实有效,因为它显然会产生期望的行为。我用它画了一些分形,用OpenGL,所以它最后做了一些相当密集的工作。
正如我说的那样,我已经为setter使用了引用捕获,特别是因为我认为由于this是对当前实例的引用,所以可能需要引用,而且由于默认情况下,标识符会在类范围内搜索(在本例中)并查找字段,因此对getter的值捕获也是必要的。
我有两个问题:
this被突出显示为一个不存在的变量(尽管它“工作”)。知道为什么会这样吗?double getRe() {return re;} )时,呈现从绝对即时到2-3秒不等。这一切为什么要发生?发布于 2018-03-07 19:19:25
请允许我为您修复此代码:
struct Complex {
double re, im;
Complex() : re(0.0), im(0.0) {}
Complex(double re, double im) : re(re * 1.0), im(im * 1.0) {}
Complex(const Complex &c) = default;
~Complex() = default;
};完全相同的结果,更好的可读性,更小的内存占用。勇敢点儿。您的代码对于const-正确性来说也是相当糟糕的。
是的,由于多种因素,您的代码非常慢:
https://stackoverflow.com/questions/49159534
复制相似问题