C ++ лямбдас как методы классаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C ++ лямбдас как методы класса

Сообщение Anonymous »

В качестве гипотетического вопроса я хотел бы использовать Lambdas в качестве методов класса. Я понимаю, что это плохо в профессиональном контексте, но мне все равно любопытно. Пример, вероятно, будет лучше для показа, что я хочу сделать. Вот базовый класс для сложных чисел: < /p>

Код: Выделить всё

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 getRe = [=]() -> double { return re; };
function setRe = [&](double re) -> void { this->re = re; };

function getIm = [=]() -> double { return im; };
function setIm = [&](double im) -> void { this->im = im; };

};
< /code>

Сначала я пытался использовать Auto < /code> вместо явного определения типов функций, но я получил ошибки, говоря, что я не могу использовать Auto < /code> в не статических полях. < /p>

Это, по -видимому, на самом деле работает, как это, очевидно, создает желаемое поведение. Я использовал его, чтобы нарисовать фракталы, используя OpenGL, так что он в конечном итоге выполняет довольно интенсивную работу. < /p>

Как я уже сказал, он, кажется, работает, я использовал справочный захват для сеттеров, тем более что я решил, что, поскольку этот < /code> является ссылкой на текущий экземпляр, который он может понадобиться, и захват значения для Getters, поскольку по умолчанию идентификатор в итоге в итоге (в этом случае) в сферах класса и находит поле. Вопросы: < /p>

[list]
[*]  Я не проверял это с помощью Visual Studio, но в том, что я использую, Clion с компилятором MSVC, этот < /code> выделяется как несущественная переменная (даже если она работает «работает»). Есть идеи, почему это происходит? Как в более чем на порядок медленнее. Рендеринг переходит от абсолютно мгновенного, когда я использую простые getters и сеттеры, такие как Double getre () {return re;} 
, до 2-3 секунды. Почему это происходит?
[/list]

Подробнее здесь: https://stackoverflow.com/questions/491 ... ss-methods
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»